Авторизация JWT с несколькими ролями в django rest framework с помощью simple-jwt
У меня есть сайт на django, использующий django-rest-framework и simple-jwt для аутентификации. Docs: https://django-rest-framework-simplejwt.readthedocs.io/en/latest/index.html
На моем сайте есть 2 роли с разными возможностями. Мне нужно авторизовать их. Но я не могу найти, как это сделать. Кто-нибудь может дать мне пример или документацию для выполнения этой функции.
Большое спасибо.
permissions.py
from typing import Type
from django.http.request import HttpRequest
from rest_framework.permissions import BasePermission
from users.models import Worker
class IsWorkerUser(BasePermission):
"""
Allows access only to worker users.
"""
def has_permission(self, request: Type[HttpRequest], view):
if request.user.is_worker:
return bool(request.user and request.user.is_worker and request.user.is_authenticated)
return False
class IsManagerUser(BasePermission):
"""
Allows access only to manager users.
"""
def has_permission(self, request: Type[HttpRequest], view):
if request.user.is_worker:
worker = Worker.objects.get(user=request.user.id)
if worker:
return bool(request.user and request.user.is_worker and request.user.is_authenticated and worker.is_manager)
return False
views.py
class ManagerViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer
queryset = User.objects.all()
permission_classes = [IsManagerUser]
С помощью permission_classes вы можете указать, какие пользователи имеют права на выполнение определенных действий. Также вы можете делать это не только для наборов представлений, но и для каждого конкретного запроса, если вы этого хотите.