根据django-guardian权限覆盖get_queryset

时间:2018-03-04 14:00:19

标签: python django django-guardian

我试图根据用户拥有的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

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

1 个答案:

答案 0 :(得分: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)

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