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

时间:2014-06-05 20:22:22

标签: 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 class中包含权限,我不知道这是否是一种很好的方法。

  3. 如何将Member class添加到member group?或者我是否必须向member group添加权限?:

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

    之后,用户将用户从Member class添加到member group?:

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

    所以,我想将权限放在Member class中并将该类放在member group中。我不知道是否可以。

    我想知道用户是否在member group中。我看到了一种方法,但我不确定它是否好。因为每次我必须从组中检索所有用户:

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

1 个答案:

答案 0 :(得分:2)

我不是Django中具有权限的专家,但据我所知,要做的主要任务(特别是按此顺序,你在需要时做你需要的事情)如下:

  • 您创建权限
  • 您创建群组
  • 您将用户链接到您的论坛
  • 您将权限链接到您的群组

使用此“模式”可以灵活地让用户能够进入0-> N组,并将组链接到0-> N权限。

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

话虽如此,小心不要将模型扩展与权限混合:

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

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

相关问题