Python 基于django guardian权限覆盖get_queryset
我正试图根据用户从django guardian获得的对象权限覆盖Python 基于django guardian权限覆盖get_queryset,python,django,django-guardian,Python,Django,Django Guardian,我正试图根据用户从django guardian获得的对象权限覆盖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()
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
遗憾的是,这实际上没有任何作用,所有的项目,不管用户拥有什么权限,都是可见的。首先,您需要了解视图需要什么权限。 然后,根据这些权限获取对象 若你们不知道对象的权限,那个么你们可以通过和模型相关的所有权限来过滤你们的对象 对于获取,请执行以下操作:
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)
就这些!没有在每个对象上循环,检查权限并返回错误的方式