我想创建用户角色(成员、合作伙伴、管理员等)extending the existing User model .
class Member(models.Model):
user = models.OneToOneField(User)
#custom fields
在这种情况下创建和分配权限的最佳方法是什么?
我看到很多方法可以做到这一点:
Programmatically creating permissions :
permission = Permission.objects.create(codename='can_publish', name='Can Publish Posts', content_type=content_type)
-
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/