我无法理解如何在Django中设置权限。我希望某些用户能够查看和修改普通用户无法访问的特定模型。
但是在我为组分配权限后,我看不到该组中各个用户的权限。
例如,在shell中:
from django.contrib.auth.models import Group, User, Permission
from django.contrib.contenttypes.models import ContentType
somemodel_ct = ContentType.objects.get(app_label='myappname', model='moderation')
can_view = Permission(name='Can View', codename='can_view_something',
content_type=somemodel_ct)
can_view.save()
can_modify = Permission(name='Can Modify', codename='can_modify_something',
content_type=somemodel_ct)
can_modify.save()
g = Group.objects.get(pk=1) # the group of moderators
g.permissions = [can_view, can_modify]
g.user_set.all() # can see alice and bob, alice is the superuser created after syncdb
alice.has_perm('can_view_something') # returns True
bob.has_perm('can_view_something') # returns False
为什么没有将权限分配给bob?
答案 0 :(得分:1)
根据the documentation,权限应采用<app label>.<permission codename>
。
如果用户具有指定的权限,则返回True,其中 perm为 格式为“&lt; app label&gt;。&lt; permission codename&gt;”。 (见文件 关于权限)。如果用户处于非活动状态,则此方法将始终使用 返回False。
替换以下行:
alice.has_perm('can_view_something')
bob.has_perm('can_view_something')
使用:
alice.has_perm('myappname.can_view_something')
bob.has_perm('myappname.can_view_something')
并确保bob
是活跃用户。
alive.has_perm(...)
返回True Django不检查活动超级用户的权限。 has_perm
始终为活跃的超级用户返回True
。
def has_perm(self, perm, obj=None):
...
# Active superusers have all permissions.
if self.is_active and self.is_superuser:
return True