Django:user.has_perm始终为true,用户不是超级用户。为什么?

时间:2013-05-07 21:25:39

标签: django permissions django-1.5

我在Django 1.5应用程序中分配了用户的权限。 当我用

列出所有用户权限时
In [1]: user.get_all_permissions()
Out[1]: set([u'profile.change_profile'])

我可以看到一个权限(这是正确的和想要的)。用户也不是超级用户,不是管理员。

In [2]: user.is_superuser
Out[2]: False

但是,如果我尝试使用user.has_perm,我总是会将True作为任何已提交的权限请求的回复。

In [3]: user.has_perm('random_permission')
Out[3]: True

如果用户是超级用户/管理员,我期望的行为。为什么非超级用户对每个请求始终True?我错过了任何设置吗?

1 个答案:

答案 0 :(得分:5)

正如Thane Brimhall在评论中提到的,您应该检查您的身份验证后端。 您可以在django sources中找到关于用户模型的has_perm方法的评论:

  

如果用户具有指定的权限,则返回True。这种方法           查询所有可用的auth后端,但如果有的话立即返回           后端返回True。因此,获得单一许可的用户           认为auth后端通常具有权限。

另外不要忘记检查用户组。默认后端检查用户组权限,因此可以连接。