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

neu*_*rix 12 django permissions django-1.5

我在Django 1.5应用程序中分配了一个用户的权限.当我列出所有用户权限时

In [1]: user.get_all_permissions()
Out[1]: set([u'profile.change_profile'])
Run Code Online (Sandbox Code Playgroud)

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

In [2]: user.is_superuser
Out[2]: False
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用user.has_perm,我总是得到True任何提交的权限请求的返回.

In [3]: user.has_perm('random_permission')
Out[3]: True
Run Code Online (Sandbox Code Playgroud)

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

sep*_*red 5

如Thane Brimhall的评论中所述,您应该检查身份验证后端。您可以在Django来源中找到有关User模型的has_perm方法的注释:

如果用户具有指定的权限,则返回True。此方法查询所有可用的身份验证后端,但是如果任何后端返回True,则立即返回。因此,通常假定具有来自单个auth后端许可的用户具有许可。

同样不要忘记检查用户组。默认后端检查用户组权限,以便可以连接它。