jwt 令牌授权无法与自定义角色一起正常工作

Posted

技术标签:

【中文标题】jwt 令牌授权无法与自定义角色一起正常工作【英文标题】:jwt token authorization is not working properly with custom role 【发布时间】:2020-11-17 11:27:04 【问题描述】:

我正在使用 django-rest-framework 和 Django 的默认 auth_user 表,我创建新表来管理新的 user_role,并使用 auth_user 扩展它。 id 来管理更多角色,例如 (teacher, student, staff, admin, school) 但现在在 Django 中只有 3 个装饰器 permission_classes (IsAuthenticated , AllowAny, IsAdminUser) 来验证不同角色的用户来验证用户。

我在我的 Django 应用程序中使用下面的 JWT 令牌模块。

JWT 代币:https://django-rest-framework-simplejwt.readthedocs.io/en/latest/

我认为的解决方案: 首先使用 IsAuthenticated 装饰器 permission_classes 确保用户已通过身份验证或登录,然后我过滤表并检查根据扩展用户表中的用户角色,用户是否具有访问特定路由的足够权限

问题:我需要在每个路由中一次又一次地过滤数据以检查用户角色。

请告诉我管理这件事的最佳方法

【问题讨论】:

【参考方案1】:

您认为解决方案应该是我将如何处理它。 IsAdminUser 内置在 django-rest-framework 中,但是当与 JWT 库一起使用时,只检查 IsAuthenticated 更有意义。我目前正在一个具有多个角色的应用程序中处理类似的事情。

# models.py

from django.db import models
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.base_user import AbstractBaseUser

class MyUser(AbstractBaseUser, PermissionsMixin):
    ADMIN = 1
    MANAGER = 2
    EMPLOYEE = 3

    ROLE_CHOICES = (
        (ADMIN, 'Admin'),
        (MANAGER, 'Manager'),
        (EMPLOYEE, 'Employee'),
    )

    role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, blank=True)

    # Other fields omitted

如果您的用户可以拥有多个角色,您可以创建一个角色表并创建一个 ManyToMany 字段。进入视图逻辑后,您可以执行以下操作:

# views.py

from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenicated
from rest_framework.response import Response


class SomeApiView(APIView):
    # declare serializer
    permission_classes = (IsAuthenticated, )
   
    def get(self, request):
        user = request.user
        if user.role != 1:
            return Response(, HTTP_403_FORBIDDEN)
        else:
            # get logic for requested view

【讨论】:

谢谢。我会尝试使用这个解决方案。一旦它可以工作,我会在这里更新 在我的情况下,我设置了许多 boolean 以避免在模型中进行选择。如is_adminis_manager

以上是关于jwt 令牌授权无法与自定义角色一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC3 应用程序中将 Ninject 与自定义角色提供程序一起使用

Xcode 6 大小类中的自定义字体大小无法与自定义字体一起正常工作

Spring @Cacheable 在 Spring 中无法与自定义键一起正常工作

WebApi 2 在使用自定义 JWT 令牌进行授权时总是返回 401

在 Forms UWP 中,自定义标题视图中的内容视图的后退导航无法与自定义渲染器一起正常工作

WebApi 2始终使用自定义JWT令牌返回401授权