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每个请求?我错过了任何设置吗?

4

1 回答 1

6

正如Thane Brimhall 在评论中提到的,您应该检查您的身份验证后端。您可以在django 源代码中找到有关 User 模型的 has_perm 方法的评论:

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

也不要忘记检查用户组。默认后端检查用户组权限,因此它可能已连接。

于 2013-12-16T13:05:39.543 回答