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_admin
、is_manager
以上是关于jwt 令牌授权无法与自定义角色一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章
在 MVC3 应用程序中将 Ninject 与自定义角色提供程序一起使用
Xcode 6 大小类中的自定义字体大小无法与自定义字体一起正常工作
Spring @Cacheable 在 Spring 中无法与自定义键一起正常工作
WebApi 2 在使用自定义 JWT 令牌进行授权时总是返回 401