【问题标题】:JWT Authorization multiple role in django rest framework using simple-jwtdjango rest框架中使用simple-jwt的jwt授权多角色
【发布时间】:2021-11-14 14:07:26
【问题描述】:
【问题讨论】:
标签:
python
django
django-rest-framework
authorization
django-rest-framework-simplejwt
【解决方案1】:
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,您可以指定哪些用户有权做某事。此外,您不仅可以在视图集上执行此操作,还可以根据需要在每个特定请求上执行此操作。