使 django simple JWT 具有与 Django Admin 相同的权限

Posted

技术标签:

【中文标题】使 django simple JWT 具有与 Django Admin 相同的权限【英文标题】:Make that django simple JWT have the same permissions as Django Admin 【发布时间】:2021-04-06 15:14:33 【问题描述】:

我正在使用 DjangoRestFramework 在 Django 中开发 api,现在我开始使用 Tokens,(我正在使用 JWT 和 djangorestframework_simplejwt 库)。我想要的是在令牌中拥有与我的 django 管理员相同的权限,例如,我在我的 Django 管理员中为特定应用程序创建了一个组,但是当我将 httpie 与一个不应该拥有的用户一起使用时权限我可以获取所有数据。

您知道连接这些权限的方法吗?

这是我写的代码。

from rest_framework.permissions import IsAuthenticated

class ArticulosLista(APIView):

   permission_classes = (IsAuthenticated, )
   # All other methods

【问题讨论】:

【参考方案1】:

DRF 已内置 permissions(管理员、用户、只读...)。

当然,您可以编写自己的权限类,扩展自 DRF permissions.BasePermission

例如:

from rest_framework import permissions, exceptions

class YourCustomPermission(permissions.BasePermission):

    def has_permission(self, request, view):
        user = request.user
        if user.in_group('abc') and user.is_staff and user. is_authenticated: 
           return (user, None) #success 
        else:
           data = 
                'code': 403,
                'data': "Invalid User"
            
           raise exceptions.APIException(data) #raise fail

您可以在视图中使用您的自定义权限:

from your_file import YourCustomPermission

class ArticulosLista(APIView):

   permission_classes = (YourCustomPermission, )

更多关于如何写custom permission class

【讨论】:

这是关于如何为 DRF 创建自定义权限的一般描述。它不适用于 Simple JWT @JoelGMathew 是的,这正是提问者想要的,您可以在has_permission 方法中编写一个逻辑来检查请求中的令牌。你说的是来自authentication_class 而不是permission_class。 2个不同的概念。在权限类 request.user 将永远是从认证类返回的用户

以上是关于使 django simple JWT 具有与 Django Admin 相同的权限的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework 中 Simple-JWT 的自定义权限

如何使用 Simple JWT(django rest)将 JWT 令牌列入黑名单?

Django DRF websocket 通道 2 并使用来自 Simple JWT 的令牌进行授权

使用 Django Rest Framework Simple JWT TokenRefresh 返回用户名和 ID

在 Django simple-jwt 令牌身份验证中获取后端中的当前刷新令牌

从 Django Rest Framework SIMPLE JWT 令牌(第 3 方)获取中间件中的用户名