我在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
?我错过了任何设置吗?
答案 0 :(得分:5)
正如Thane Brimhall在评论中提到的,您应该检查您的身份验证后端。 您可以在django sources中找到关于用户模型的has_perm方法的评论:
如果用户具有指定的权限,则返回True。这种方法 查询所有可用的auth后端,但如果有的话立即返回 后端返回True。因此,获得单一许可的用户 认为auth后端通常具有权限。
另外不要忘记检查用户组。默认后端检查用户组权限,因此可以连接。