【问题标题】:Different permissions for different methods in action decorator view?动作装饰器视图中不同方法的不同权限?
【发布时间】:2022-01-05 00:02:05
【问题描述】:

我在 ViewSet 中有一个动作装饰器,它接受两种方法:

class ItemViewSet(viewsets.ModelViewSet):
  queryset = Item.objects.all()
  serializer = DefaultItemSerializer

  @action(detail=True, method=["get", "post"], permission_classes=[AllowAny])
  def custom_action(self, request, pk):
    qs = self.get_object()
    if request.method == "GET":
         return Response(CustomItemSerializer(qs).data, status=200)
    else:
      serializer = CustomItemSerializer(qs, data=request.data)
      if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=201)
      return Response(serializer.data, status=400)

目前getpost拥有AllowAny相同的权限。

如果我希望它们与众不同怎么办?例如。 getAllowAnypost 应该只是 IsAdminUser

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:
    class ItemViewSet():
    
      def get_permissions(self):
        permission_classes = [AllowAny]
        if self.action == "custom_action":
          if self.request.method == "GET":
            permission_classes = [AllowAny]
          elif self.request.method == "POST":
            permission_classes = [IsAdmin]
        return [permission() for permission in permission_classes]
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多