我正在处理的Django网站有可能让用户注册一个帐户。为了向他们提供一些编辑功能,我使用内置的Django管理员。但是,我遇到了一个问题:用户注册后,他们在Django管理员中没有任何权限,甚至没有查看权限。因此,我的问题是:我如何在代码中为相关模型的用户分配管理员权限,就像我在管理员中编辑用户时在“用户权限”部分中手动分配它们一样?我已经尝试使用自定义has_xxx_permissions()
类usual ModelAdmin
,但这不起作用。所以我的猜测是我忽略了一些显而易见的事情。有什么想法吗?
答案 0 :(得分:8)
https://docs.djangoproject.com/en/dev/topics/auth/default/#permissions-and-authorization
new_user.user_permissions.add(permission1, permission2, etc...)
答案 1 :(得分:5)
出于您的目的,将所有新用户分配到特定组可能会更加轻松高效,然后为该组授予用户所需的所有权限。该组的任何成员也将继承这些权限。
您可以在管理员中创建组并为其分配权限。然后,您只需在注册码中添加以下内容即可。
try:
group = Group.objects.get(name='The User Group')
except Group.DoesNotExist:
# group should exist, but this is just for safety's sake, it case the improbable should happen
pass
else:
user.groups.add(group)
答案 2 :(得分:3)
dgel的回答指出了我为我提供工作解决方案的方向。基本上,他似乎建议的是:
Permission.objects.get()
创建一个Permission对象,其中包含内容类型以及您希望在管理员内部允许的操作。这里唯一的困难是找出codename
参数,对于管理员权限,该参数由一个动作(“添加”,“更改”或“删除”),一个下划线和模型名称组成。因此,如果您有一个名为Foo
的模型并且您想要为其创建所有权限,则需要3个权限,每个权限都包含Foo
模型的内容类型以及代码名称{{1} },add_foo
和change_foo
。delete_foo
分配这些权限。转到dgel对code examples的回答。查看现有Django数据库的auth app(user.user_permissions.add(permission)
)的数据转储,也为我提供了对权限内部工作的深入了解。
答案 3 :(得分:1)
从Django 1.6开始:
每个用户都有一个多对多字段user_permissions
到权限 - 您可以为此添加权限:
your_user.user_permissions.add(permission)
v1.6文档:
答案 4 :(得分:1)
我会在谷歌发现这个问题之后完全回答你的问题。我将在团队中展示我在Django 1.9中所做的事情,然后向用户展示如何做到这一点。
来自django.contrib.auth.models导入组,权限 group,__ = Group.objects.get_or_create(name ='my_group')
permissions = Permission.objects.all()
for p in permissions:
group.permissions.add(p)
group.save()
很容易适应用户:
from django.contrib.auth.models import Permission
permissions = Permission.objects.all()
for p in permissions:
youruser.user_permissions.add(p)
youruser.save()
我更喜欢群组,因为您可能会在将来添加权限,只能添加到群组而不是重新执行所有用户。