Добавление разрешений для представлений
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}
Можно пройти в админке и убедиться, что пользователь теперь зарегистрирован на курс.