Добавление разрешений для представлений

REST Framework включает систему разрешений(permission system) для ограничения доступа к представлениям. Вот некоторые из встроенных разрешений REST Framework:

  • AllowAny : Неограниченный доступ, независимо от того, прошел ли пользователь аутентификацию или нет.
  • IsAuthenticated : Разрешает доступ только для аутентифицированных пользователей.
  • IsAuthenticatedOrReadOnly : Полный доступ для аутентифицированных пользователей. Анонимным пользователям разрешено выполнять только такие методы чтения, как GET, HEAD, и OPTIONS.
  • DjangoModelPermissions : Разрешения, привязанные к django.contrib.auth. Для представления требуется атрибут queryset. Доступы предоставляются только аутентифицированным пользователям с назначенными моделью разрешениями.
  • DjangoObjectPermissions : Django разрешения для каждого объекта.

Если пользователю отказано в доступе, он получит одну из следующих ошибок HTTP:

  • HTTP 401 : Unauthorized
  • HTTP 403 : Permission denied

Дополнительные сведения о разрешениях можно получить здесь: http://www.django-rest-framework.org/api-guide/permissions/

Отредактируйте файл api/views.py в приложении courses и добавьте атрибут permission_classes в CourseEnrollView следующим образом:

from rest_framework.authentication import BasicAuthentication
from rest_framework.permissions import IsAuthenticated


class CourseEnrollView(APIView):
    authentication_classes = (BasicAuthentication,)
    permission_classes = (IsAuthenticated,)
    # ...

Мы включаем разрешение на проверку подлинности. Это запретит доступ анонимных пользователей к view. Теперь мы можем выполнить запрос POST для нового метода API.

Убедитесь, что сервер разработки запущен. Откройте терминал и выполните следующую команду:

curl -i –X POST http://127.0.0.1:8000/api/courses/1/enroll/

Вы получите следующий ответ:

HTTP/1.0 401 UNAUTHORIZED
...
{"detail": "Authentication credentials were not provided."}

Мы получим код HTTP 401, как ожидалось, поскольку мы не прошли проверку подлинности. Давайте аутентифицируем себя одним из пользователей. Выполните следующую команду:

curl -i -X POST -u student:password http://127.0.0.1:8000/api/courses/1/enroll/

не забудьте заменить student:password на свои логин и пароль. Вы получите следующий ответ:

HTTP/1.0 200 OK
...
{"enrolled": true}

Можно пройти в админке и убедиться, что пользователь теперь зарегистрирован на курс.

results matching ""

    No results matching ""