Выбор ответа Middle Django REST Framework спрашивают часто обновлено
has_object_permission и список объектов
Вопрос
Permission-класс проверяет владельца в has_object_permission. Защищает ли это эндпоинт списка GET /orders/?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Нет: для списка она не вызывается, фильтровать нужно в getqueryset. Объектная проверка срабатывает только в getobject(), то есть для retrieve, update, destroy и своих detail-действий. list возвращает весь queryset, и пользователь увидит чужие заказы.
Варианты ответа
- Да: DRF вызывает объектную проверку для каждого элемента списка
- Нет: для списка она не вызывается, фильтровать нужно в
get_querysetправильный ответ - Да, если включена пагинация: проверка идёт для объектов страницы
- Нет, но достаточно добавить
IsAuthenticatedвpermission_classesвьюсета
Разбор
Объектная проверка срабатывает только в get_object(), то есть для retrieve, update, destroy и своих detail-действий. list возвращает весь queryset, и пользователь увидит чужие заказы. Правильно ограничить get_queryset текущим пользователем. IsAuthenticated лишь требует вход, но не ограничивает видимость.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.