我想创建用户角色(成员,合作伙伴,管理员等)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 class
中包含权限,我不知道这是否是一种很好的方法。
如何将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:
答案 0 :(得分:2)
我不是Django中具有权限的专家,但据我所知,要做的主要任务(特别是按此顺序,你在需要时做你需要的事情)如下:
使用此“模式”可以灵活地让用户能够进入0-> N组,并将组链接到0-> N权限。
本文档的这一部分解释了如何使用权限和示例: https://docs.djangoproject.com/en/dev/topics/auth/default/#topic-authorization
话虽如此,小心不要将模型扩展与权限混合:
不确定这完全回答了你的问题,但我希望它能让你更清楚。