我在 Django 1.5 应用程序中分配了用户的权限。 当我用
列出所有用户权限时In [1]: user.get_all_permissions()
Out[1]: set([u'profile.change_profile'])
我可以看到一项权限(这是正确的且需要的)。该用户也不是 super 用户,也不是管理员。
In [2]: user.is_superuser
Out[2]: False
但是,如果我尝试使用 user.has_perm
,我总是会得到 True
作为任何提交的权限请求的返回。
In [3]: user.has_perm('random_permission')
Out[3]: True
如果用户是 super 用户/管理员,我期望的行为。为什么非 super 用户对于每个请求总是得到 True
?我错过了什么设置吗?
最佳答案
正如 Thane Brimhall 在评论中提到的,您应该检查您的身份验证后端。 您可以在 django sources 中找到有关 User 模型的 has_perm 方法的注释:
Returns True if the user has the specified permission. This method queries all available auth backends, but returns immediately if any backend returns True. Thus, a user who has permission from a single auth backend is assumed to have permission in general.
另外不要忘记检查用户组。默认后端检查用户组权限,因此可以连接。
关于Django:user.has_perm 始终为 true 并且用户不是 super 用户。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16428827/