Переопределить get_queryset, основываясь на разрешениях django-guardian
Я пытаюсь переопределить get_queryset
основанный на разрешениях объекта, которые пользователи имеют от django guardian, так что видны только объекты, для которых у пользователей есть разрешения.
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 ответ
Во-первых, вам нужно понять, какие разрешения требуются для вашего просмотра. Затем, в соответствии с этими разрешениями, извлекайте объекты.
Если вы не знаете разрешений для объекта, то вы можете фильтровать ваши объекты по всем разрешениям, связанным с моделью.
Документы для получения:
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)
И это все! Не зацикливаясь на каждом объекте, проверяя разрешения и возвращая неправильный путь.