Фильтруйте исходный QuerySet по request.user или разрешённому tenant до поиска объекта по ID. Идентификатор владельца из входного запроса не должен определять доступ.
Вы хорошо отметили важность безопасности и корректности данных. Расскажите, как бы вы реализовали фильтрацию по владельцу в Django ORM, чтобы избежать таких утечек?
Фильтруйте исходный 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.