考虑Django shell会话的以下输出:
>>> from django.contrib.auth.models import User, Group
>>> g=Group.objects.all()
>>> g
<QuerySet [<Group: Tester>, <Group: Testmanager>]>
>>> g[1].permissions.all()
<QuerySet [..., <Permission: testman | test plan step | Can add test plan step>, <Permis
sion: testman | test plan step | Can change test plan step>, <Permission: testman | test plan step |
Can delete test plan step>, <Permission: testman | test plan step | Can view test plan step>, ...]>
>>> g[1].user_set.all()
<QuerySet [<User: somedude>, <User: testma>]>
>>> u=User.objects.all()
>>> u
<QuerySet [<User: somedude>, <User: test>, <User: testma>]>
>>> u[0].has_perm('testman.create_testplanstep')
True
>>> u[2].has_perm('testman.create_testplanstep')
False
我已经定义了两个组,Tester和Testmanager。用户somedude是站点管理员,也是Testmanager组的成员。用户测试不是站点管理员,而是Testmanager中的用户。组Testmanager对模型TestPlanStep具有所有权限。然而,用户的testma没有获得许可。我在做什么错了?
编辑:用户测试已激活。
Edit2:
>>> u[2].username
'testma'
答案 0 :(得分:0)
尝试执行此操作,以确保正确构造权限名称:
g = Group.objects.all()
perms = g[1].permissions.all()
us = g[1].user_set.filter(is_active=True)
missingperms = set()
for u in us:
for p in perms:
pstring = p.content_type.app_label + '.' + p.codename
if not u.has_perm(pstring):
missingperms.add(pstring)
print('missing permissions count:', len(missingperms))
输出应为0缺少权限。
附录: 超级用户具有特定权限的事实不能证明该权限是有效的。您可以尝试例如:
u = User.objects.filter(is_superuser=True)[0]
u.has_perm('burn_down_the_house')
答案 1 :(得分:0)
我知道了。自动添加到模型的权限称为“ create _...”,但您在管理站点中添加的权限称为“ add _...”。所以
>>> u[2].has_perm('testman.add_testplanstep')
True
但是很奇怪。我对这些名称取不同的名字没有道理。