【问题标题】:JWT Authorization multiple role in django rest framework using simple-jwtdjango rest框架中使用simple-jwt的jwt授权多角色
【发布时间】:2021-11-14 14:07:26
【问题描述】:

我有一个使用 django-rest-framework 和 simple-jwt 进行身份验证的 django 网站。文档:https://django-rest-framework-simplejwt.readthedocs.io/en/latest/index.html

我的网站有 2 个具有不同功能的角色。我必须授权他们。但我找不到该怎么做。任何人都可以给我一个示例或文档来执行此功能。

非常感谢。

【问题讨论】:

    标签: 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,您可以指定哪些用户有权做某事。此外,您不仅可以在视图集上执行此操作,还可以根据需要在每个特定请求上执行此操作。

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 2018-11-19
      • 2017-12-14
      • 2018-04-17
      • 2020-12-18
      • 2019-09-17
      • 2015-08-13
      • 2019-02-25
      • 2020-07-09
      相关资源
      最近更新 更多