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

Вернуться на верх