#python #django #django-rest-framework #django-queryset #django-permissions
#python #django #django-rest-framework #django-набор запросов #django-разрешения
Вопрос:
Я пытаюсь выяснить, какова «наилучшая практика» для ограничения QuerySet
s на основе User
разрешений s.
Например, на панели инструментов есть таблица счетов. User
Group
вызвавший Admin
может видеть все счета, но User
группа Broker
может видеть только свои собственные счета. Это означает только те счета, которые имеют user = ...
.
Моя идея состоит в том, чтобы создать два разрешения can_see_all_invoices
и can_see_own_invoices
.
Теперь, когда я вызываю QuerySet
using Django Rest Framework
, я проверю наличие разрешений и верну отфильтрованное QuerySet
.
Или я должен фильтровать QuerySet
интерфейс, и если Broker
запрашивает все счета, я бы поднял PermissionError?
Какой из этих подходов используется или есть другой подход?
Ответ №1:
ИМО, это был бы чистый метод
class MyInvoiceAPI:
def get_queryset(self):
qs = Invoice.objects.all()
if self.request.user.has_perm('can_see_all_invoices'):
return qs
return qs.filter(user=self.request.user)
Примечания
- Вам не нужны два разрешения, только одно, которое
can_see_all_invoices
- В этом случае я бы не стал вызывать никаких ошибок, связанных с отказом в разрешении, поскольку это API-интерфейс List, а оценка объекта — дорогостоящий процесс