首页 > 解决方案 > “您无权查看或编辑任何内容。” 即使用户有权访问模型

问题描述

解决了


我知道这个“错误”消息很常见,并且已经有关于这个的帖子。但没有找到解决我的问题的方法。

我正在使用 Django 提供的已经存在的“用户”、“组”、“用户管理器”。但是,我有一个自定义身份验证后端:

    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 文档中模型列表的权限,但什么也没找到。

我需要在后端身份验证中添加任何内容吗?添加一个新的烫发?即使是关于在哪里查看以进行调查的建议也将不胜感激!

编辑1

在调试django代码本身之后,我需要添加这个方法:

def has_module_perms(self, user_obj, perm, obj=None):

如此愚蠢的错误...

标签: djangodjango-admindjango-permissions

解决方案


我需要更改我的 has_perm,因为权限是权限的 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

推荐阅读