Создание кастомных разрешений
Мы хотим, чтобы студенты могли получить доступ к содержимому курсов, в которые они зачислены. Только студенты, обучающиеся на курсе, должны иметь возможность получить доступ к его содержимому. Лучший способ сделать это — использовать кастомный класс разрешений. 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 на подачу заявок.