django - 创建扩展现有用户模型的用户角色和权限

标签 django django-models django-authentication

我想创建用户角色(成员、合作伙伴、管理员等)extending the existing User model .

class Member(models.Model):
    user = models.OneToOneField(User)
    #custom fields

在这种情况下创建和分配权限的最佳方法是什么?

我看到很多方法可以做到这一点:

  1. Programmatically creating permissions :

    permission = Permission.objects.create(codename='can_publish',
                                           name='Can Publish Posts',
                                           content_type=content_type)
    
  2. Included in a model object :

    class Task(models.Model):
        ...
        class Meta:
            permissions = (
                ("view_task", "Can see available tasks"),
                ("change_task_status", "Can change the status of tasks"),
                ("close_task", "Can remove a task by setting its status as closed"),
        )
    

    它被编码了吗?但我想将权限包含在 Member 类 中,我不知道这是否是一个好方法。

如何将成员类别添加到成员组?或者我是否必须向成员组添加权限?:

view_task = Permission.objects.get(name='view_task')
membergroup.permissions.add(view_task)

然后将成员类别中的用户逐个添加到成员组?:

user = User.objects.get(username='test')
membergroup = Group.objects.get(name='member')
user.groups.add(membergroup)

因此,我想将权限放入成员类中,并将该类放入成员组中。不知道这样好不好。

例如,我想知道用户是否属于成员组。我看到了一个方法,但我不确定它是否好。因为我每次都必须从组中检索所有用户:

users_in_group = Group.objects.get(name="member").user_set.all()
if user in users_in_group:

最佳答案

我不是Django方面的权限专家,但据我所知,要做的主要任务(不是特别按这个顺序,你需要的时候就做你需要做的事情)如下:

  • 您创建权限
  • 您创建群组
  • 您将用户链接到您的群组
  • 您将权限与您的群组关联起来

使用此“模式”可以让您灵活地让用户能够加入 0->N 个组,并且这些组可以链接到 0->N 个权限。

文档的这一部分通过示例解释了如何使用权限: https://docs.djangoproject.com/en/dev/topics/auth/default/#topic-authorization

话虽这么说,请注意不要将模型扩展与权限混合在一起:

  • 当您想在用户模型上添加特殊属性时,可以扩展用户模型。例如,ClientUser 和 BusinessSeller 可以是用户模型扩展,因为您确实希望它们具有不同的属性。这与权限无关。 这意味着您可以在不扩展用户模型的情况下使用用户的权限。

不确定这是否完全回答了您的问题,但我希望它能让您更清楚。

关于django - 创建扩展现有用户模型的用户角色和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069572/

相关文章:

python - Django 自定义查询集和导出

python - blog.Post : (models. E014) 'ordering' 必须是元组或列表(即使您只想按一个字段排序)。在 Django

python - django.contrib.auth 中的哪个函数创建默认模型权限?

MySQL 转义一切(所有特殊字符)

python - Django Haystack SOLR 中的排序顺序

python - Django:在我的模型中使用标准 Auth 库

Django 如何防止多个用户使用相同的凭据登录

django - AWS Cognito 作为 Django 身份验证后端

django - 通过父插件配置 LinkPlugin <a href class> 或其他属性

Django Admin - 基于正在编辑的当前对象过滤选择字段