Выбор ответа Middle Django REST Framework спрашивают часто обновлено

has_object_permission и список объектов

Вопрос

Permission-класс проверяет владельца в has_object_permission. Защищает ли это эндпоинт списка GET /orders/?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет: для списка она не вызывается, фильтровать нужно в getqueryset. Объектная проверка срабатывает только в getobject(), то есть для retrieve, update, destroy и своих detail-действий. list возвращает весь queryset, и пользователь увидит чужие заказы.

Варианты ответа

  1. Да: DRF вызывает объектную проверку для каждого элемента списка
  2. Нет: для списка она не вызывается, фильтровать нужно в get_querysetправильный ответ
  3. Да, если включена пагинация: проверка идёт для объектов страницы
  4. Нет, но достаточно добавить IsAuthenticated в permission_classes вьюсета

Разбор

Объектная проверка срабатывает только в get_object(), то есть для retrieve, update, destroy и своих detail-действий. list возвращает весь queryset, и пользователь увидит чужие заказы. Правильно ограничить get_queryset текущим пользователем. IsAuthenticated лишь требует вход, но не ограничивает видимость.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.