Создание кастомных разрешений

Мы хотим, чтобы студенты могли получить доступ к содержимому курсов, в которые они зачислены. Только студенты, обучающиеся на курсе, должны иметь возможность получить доступ к его содержимому. Лучший способ сделать это — использовать кастомный класс разрешений. Django предоставляет класс BasePermission, определяет следующие методы:

  • has_permission() : Проверка разрешений на уровне представления
  • has_object_permission() : Проверка разрешений на уровне экземпляра

Эти методы должны возвращать значение True, чтобы предоставить доступ или False в противном случае. Создайте новый файл в каталоге courses/api/ и назовите его permissions.py. Добавьте в него следующий код:

from rest_framework.permissions import BasePermission


class IsEnrolled(BasePermission):
    def has_object_permission(self, request, view, obj):
        return obj.students.filter(id=request.user.id).exists()

Мы используем в качестве подкласса BasePermission и override has_object_permission(). Мы проверяем, что пользователь, выполняющий запрос, присутствует в списке объекта Course. Мы собираемся использовать IsEnrolled на подачу заявок.

results matching ""

    No results matching ""