我通过管理界面向用户添加了一些权限。
由于某种原因,所有烫发功能都失败了,例如
>>> user.get_all_permissions()
set([])
但直接访问表,有效:
>>> user.user_permissions.all()
(list of permissions as expected)
什么会导致“get_all_permissions”(以及所有像 has_perm() 这样的 perm 函数)失败?
谢谢
我通过管理界面向用户添加了一些权限。
由于某种原因,所有烫发功能都失败了,例如
>>> user.get_all_permissions()
set([])
但直接访问表,有效:
>>> user.user_permissions.all()
(list of permissions as expected)
什么会导致“get_all_permissions”(以及所有像 has_perm() 这样的 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()