【问题标题】:Allow GET request for only certain Group of Users Django Rest Framework仅允许某些用户组 Django Rest Framework 的 GET 请求
【发布时间】:2021-01-13 19:02:18
【问题描述】:

我刚刚开始使用 Django Rest 框架,并希望创建一个功能,以便它允许超级用户在 admin.py 中创建消息并只允许特定组(即)看到它。 “HR”、“经理”、“实习生”等

换句话说,只有属于“HR”组的用户才能从管理员分配给“HR”组的视图中获取数据。我只希望有一个适当授予权限的视图。

类似

#views.py
class message_view(APIView):
     def get(request):
        user = request.user
        group = get_user_group(user)   #fetches user's respective group 
        try:
          #if message assigned to 'group' then return API response 
        except:
          #otherwise 401 Error 

我需要一些指导。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    我建议您在您的应用中定义一个权限 (<your-app>/permissions.py),如下所示:

    class HasGroupMemberPermission(permissions.BasePermission):
    
        message = 'Your custom message...'
        methods_list = ['GET', ]
    
        def has_permission(self, request, view):
            if request.method not in methods_list:
                return True
             
            group_name ='put_your_desired_group_name_here'
            if request.user.groups.filter(name__exact=group_name).exists():
                return False
    
            return True
    

    然后,将上述权限导入您的视图模块 (<your-app>/views.py) 以及 Message 模型的序列化程序(假设为 MessageSerializer)。

    from rest_framework.generics import RetrieveAPIView
    from .permissions import HasGroupMemberPermission
    from .serializers import MessageSerializer
    
    class MessageView(RetrieveAPIView):
        # use indicative authentication class
        authentication_classes = (BasicAuthentication, ) 
        permission_classes = (HasGroupMemberPermission, )
        serializer_class = MessageSerializer
        lookup_url_kwarg = 'message_id' 
    
        def get_object(self):
            """ Do your query in the db """
            qs = Message.objects.get(pk=self.kwargs['message_id'])
            return qs
    
        def get(self, request, *args, **kwargs):
            return super().get(request, *args, **kwargs)
    

    如果用户未通过身份验证,将返回 401。如果登录的用户不是所需组的成员,将返回 403。如果登录用户是组成员并且message_id 存在,将返回200。

    【讨论】:

      猜你喜欢
      • 2018-12-22
      • 2019-01-07
      • 1970-01-01
      • 2016-10-21
      • 2015-03-09
      • 2020-08-26
      • 2023-04-02
      • 2019-05-04
      相关资源
      最近更新 更多