Урок 42. Виды разрешений и сигналы

📁 Блок: Auth ⏱️ Время изучения: ~70 мин 🎯 Сложность: Средняя–Высокая
#permissions #drf #BasePermission #DjangoModelPermissions #signals #request.user #object-level

⚡ Кратко: разрешения и request.user в DRF

request.user — текущий аутентифицированный пользователь из каждого DRF-запроса. Используется в perform_create() для автоматического назначения владельца и в get_queryset() для фильтрации по владельцу.

  • has_permission(request, view) — проверка на уровне всего представления
  • has_object_permission(request, view, obj) — проверка на уровне конкретного объекта
  • IsOwnerOrReadOnly — SAFE_METHODS разрешены всем, изменение — только владельцу
  • DjangoModelPermissions — используются стандартные Django permissions (view/add/change/delete)
  • Группы — набор разрешений, назначаемых сразу множеству пользователей

Частая ошибка: has_object_permission вызывается только для detail-эндпоинтов (RetrieveUpdateDestroyAPIView, detail action). Для list-эндпоинтов нужен has_permission или фильтрация в get_queryset().

📖 О чём этот урок

Урок 42 развивает тему авторизации. После знакомства с базовыми механизмами аутентификации в уроке 40 теперь изучается управление доступом: как получить текущего пользователя из запроса, как создавать собственные классы разрешений, как работают object-level permissions и как использовать встроенные Django-разрешения моделей через DjangoModelPermissions.

Что изучим

  • Извлечение пользователя через request.user — автоматическое назначение владельца и фильтрация
  • Object-level permissions: разница между has_permission и has_object_permission
  • Создание кастомных классов разрешений на основе BasePermission
  • Разрешения моделей Django: базовые права view/add/change/delete
  • Группы разрешений: организация ролей и масштабируемое управление доступом
  • Использование DjangoModelPermissions в DRF-представлениях

📚 Что повторить перед изучением

🎯 Что изучать дальше