根据django-guardian权限覆盖get_queryset

问题描述 投票:0回答:1

我试图根据用户拥有的django监护人的对象权限覆盖get_queryset,这样只有对象是可见的,用户才有权使用。

def get_queryset(self, request):
    if request.user.is_superuser:
        qs = super(MyAdminInline, self).get_queryset(request)
        return qs  

    for item in MyModel.objects.all():
        for perm in get_perms(request.user, item):
            things_user_can_see = get_objects_for_user(request.user, perm)
            return things_user_can_see

可悲的是,这实际上什么都不做,并且所有项目,无论用户拥有哪些权限,都是可见的。

python django django-guardian
1个回答
1
投票

首先,您需要了解视图所需的权限。然后,相应于那些权限获取对象。

如果您不知道对象的权限,则可以通过与模型相关的所有权限来过滤对象。

Docs用于获取:

from guardian.shortcuts import get_objects_for_user, get_perms_for_model

class MyAdminInline():
    def get_queryset(self, request):
        if request.user.is_superuser:
            qs = super(MyAdminInline, self).get_queryset(request)
            return qs  

        all_model_perms = get_perms_for_model(MyModel)
        return get_objects_for_user(request.user, all_model_perms)

就这样!没有循环遍历每个单个对象,检查权限并返回错误的方式。

© www.soinside.com 2019 - 2024. All rights reserved.