Возвращает набор запросов на основе группы пользователей / разрешений

#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, а оценка объекта — дорогостоящий процесс