已解决
我知道此“错误”消息很常见,并且已经有关于此的帖子。但是没有找到解决我问题的方法。
我正在使用Django提供的现有“用户”,“组”,“ UserManager”。但是,我有一个自定义身份验证后端:
class MyAuthentication:
# ...
# ...
def has_perm(self, user_obj, perm, obj=None):
permissions = Permission.objects.filter(user=user_obj)
if perm in permissions:
return True
return False
我的用户是管理员,而不是超级用户。他是该小组的成员,该小组拥有查看,编辑,删除和添加我的模型的所有权限。
他可以直接使用URL来访问它们。
但是,当他尝试连接到管理页面/admin/
时,他会收到此错误消息。
You don't have permission to view or edit anything
我搜索了一个权限,该权限将使他能够查看Django文档中的模型列表,但未找到任何结果。
我需要在后端身份验证中添加任何内容吗?添加新的烫发?甚至对于在哪里进行调查的建议也将不胜感激!
调试Django代码本身后,我需要添加以下方法:
def has_module_perms(self, user_obj, perm, obj=None):
如此愚蠢的错误...
答案 0 :(得分:0)
我需要更改has_perm,因为权限是Permission的QuerySet ...
万一有人需要,这是我正在使用的has_perm方法和固定代码,用于检查组权限和用户权限。
def has_perm(self, user_obj, perm, obj=None):
permissions = Permission.objects.filter(user=user_obj).values()
has_specific_perm = False
# Check groups permissions the user is member of
for group in user_obj.groups.all():
has_specific_perm = self.check_has_permission(perm, group.permissions.all().values())
# Check user's permissions if group was not enough
if not has_specific_perm:
has_specific_perm = self.check_has_permission(perm, permissions.values())
if user_obj.is_active and user_obj.is_staff and has_specific_perm:
return True
return False
def has_module_perms(self, user_obj, perm, obj=None):
return True
def check_has_permission(self, perm, permissions_to_check):
for index in range(len(permissions_to_check)):
if perm == permissions_to_check[index]['codename']:
return True