Django权限未分配给组中的所有用户

时间:2014-06-10 14:04:48

标签: django

我无法理解如何在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?

1 个答案:

答案 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

Relevant code

def has_perm(self, perm, obj=None):
    ...
    # Active superusers have all permissions.
    if self.is_active and self.is_superuser:
        return True