@vilaugra

Как правильно настроить класс доступа в Django Rest Framework?

Есть обычный класс во views.py, где я указал permission_classes = [PostPermission]
А вот сам PostPermission:
class PostPermission(BasePermission):
	"""Permissions for getting and updating post"""

	def has_permission(self, request, view):
		self.message = 'Для доступа к данной странице необходимо авторизоваться'
		return bool(
			request.method in SAFE_METHODS or 
			request.user.is_authenticated
		)

	def has_object_permission(self, request, view, obj):
		self.message = 'Это действие доступно только владульцу данного поста'
		return bool(
			request.method in SAFE_METHODS or
			request.user == obj.user or request.user.is_admin
		)

Но, если я не авторизируюсь, то сообщение выводится стандартное:
{
    "detail": "Authentication credentials were not provided."
}

Как мне поставить мое сообщение об ошибке? Сейчас оно выводится только, если я авторизован, а те функции (выше) возвращают False.
  • Вопрос задан
  • 701 просмотр
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler
бекенд-разработчик на python
Пермишны (403) - это когда известен пользователь, но прав доступа у него нет. А у вас 401 Unauthorized - бекенд пользователя не авторизовал. См. authentication_classes. Если пользователь не авторизован - всегда будет 401 ошибка. Отключаем авторизацию - и тогда непонятно, как пользователь вообще может быть админом в таком случае (если его только джанго через сессию авторизовала наверно)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы