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

12
我在我的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
你是否正在使用自定义的User模型或认证后端?也许可以在这里阅读文档:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#handling-authorization-in-custom-backends - Thane Brimhall
1个回答

6

如Thane Brimhall在评论中提到的那样,您应该检查您的身份验证后端。

您可以在django源代码中的User模型的has_perm方法中找到此评论:

如果用户具有指定的权限,则返回True。此方法查询所有可用的auth后端,但是如果任何后端返回True,则立即返回。因此,假定从单个auth后端获得了权限的用户通常具有权限。

还要记得检查用户组。默认后端会检查用户组权限,因此可能会有关联。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接