使 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