我通过管理员界面为用户添加了一些权限。
但出现了某些原因导致所有的权限函数都失败,例如:
>>> user.get_all_permissions()
set([])
但是直接访问表格就可以工作:
>>> user.user_permissions.all()
(list of permissions as expected)
什么因素可能导致"get_all_permissions"(以及所有像has_perm()这样的权限函数)失败?谢谢。
我通过管理员界面为用户添加了一些权限。
但出现了某些原因导致所有的权限函数都失败,例如:
>>> user.get_all_permissions()
set([])
但是直接访问表格就可以工作:
>>> user.user_permissions.all()
(list of permissions as expected)
什么因素可能导致"get_all_permissions"(以及所有像has_perm()这样的权限函数)失败?我也遇到了同样的问题。我猜想你曾经使用过自己编写的AUTHENTICATION_BACKEND?大多数在网上找到的例子(包括Django 1.0文档!)没有提到后端还负责权限处理。
不过这没什么大不了的:无论你的代码在哪个后端文件中,都要包含这个导入:
from django.contrib.auth.backends import ModelBackend
然后确保您编写的后端 扩展 ModelBackend,例如:
class EmailBackend(ModelBackend):
应该没问题。
在我的情况下,这是因为权限缓存。我获取用户,将权限添加到user.user_permissions
中,但是user.get_all_permissions
为空的set()
,user.has_perm
为False
。这个问题只出现在shell中而不是管理员界面。
user = User.objects.get(username="User")
permission = Permission.objects.get(
codename="organizations.add_organization",
)
user.user_permissions.add(permission)
user.get_all_permissions() # set()
user.has_perm('organizations.add_organization') # False
在检查权限之前,我必须添加额外的行:
user.user_permissions.add(permission)
user = User.objects.get(username="User") # new
user.get_all_permissions()