“您无权查看或编辑任何内容。”即使用户有权访问模型

时间:2019-11-29 08:25:32

标签: django django-admin django-permissions

已解决


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

我正在使用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文档中的模型列表,但未找到任何结果。

我需要在后端身份验证中添加任何内容吗?添加新的烫发?甚至对于在哪里进行调查的建议也将不胜感激!

EDIT1

调试Django代码本身后,我需要添加以下方法:

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

如此愚蠢的错误...

1 个答案:

答案 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