【问题标题】:Make that django simple JWT have the same permissions as Django Admin使 django simple JWT 具有与 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

【问题讨论】:

    标签: python django api django-rest-framework jwt


    【解决方案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 将永远是从认证类返回的用户
    猜你喜欢
    • 2020-12-18
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2015-02-21
    • 2014-06-18
    • 2015-04-21
    相关资源
    最近更新 更多