Вы хорошо отметили важность безопасности и корректности данных. Расскажите, как бы вы реализовали фильтрацию по владельцу в Django ORM, чтобы избежать таких утечек?

Фильтруйте исходный QuerySet по request.user или разрешённому tenant до поиска объекта по ID. Идентификатор владельца из входного запроса не должен определять доступ.

Короткий ответ

Что ответить на собеседовании

Фильтруйте исходный QuerySet по request.user или разрешённому tenant до поиска объекта по ID. Идентификатор владельца из входного запроса не должен определять доступ.

Подробный разбор

Ответ с пояснениями

Фильтруйте исходный QuerySet по request.user или разрешённому tenant до поиска объекта по ID. Идентификатор владельца из входного запроса не должен определять доступ.

Пример для авторизованного пользователя:

from django.shortcuts import get_object_or_404

queryset = Document.objects.filter(owner=request.user)
document = get_object_or_404(queryset, pk=document_id)

Тот же scope нужен в списках, обновлении, удалении и выгрузке. Для вложенного ресурса проверяйте принадлежность родителя, например Attachment.objects.filter(document__owner=request.user). При создании назначайте владельца на сервере. Если есть совместный доступ, выражайте его явной политикой; одна фильтрация интерфейса не защищает прямой URL или API.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее