如何通过Django Rest API传递权限?

如何通过Django Rest API传递权限?,django,django-rest-framework,permissions,Django,Django Rest Framework,Permissions,我想创建一个自定义权限,根据用户是否是故事作者返回true/flase,并通过restAPI传递此信息。因此,当作者请求非作者的故事时,权限返回“false”,我可以通过API访问这些信息。结果应该是这样的: "user": { "id": 35, "username": "HII", "user_permissions": [ IsStoryOwner: "False", ] } 然而,我很难实现

我想创建一个自定义权限,根据用户是否是故事作者返回true/flase,并通过restAPI传递此信息。因此,当作者请求非作者的故事时,权限返回“false”,我可以通过API访问这些信息。结果应该是这样的:

 "user": {
        "id": 35,
        "username": "HII",
        "user_permissions": [

         IsStoryOwner: "False",

        ]
    }
然而,我很难实现这一点。我写了以下许可:

class IsStoryOwner(permissions.BasePermission):
    """
    Check if authenticated user is  story author
    """
    def has_object_permission(self,request,obj,**kwargs):
        if request.user.id == story.author:
            return True
        return False
然后我将权限集成到我的UserAPI中

class UserAPI(generics.RetrieveAPIView):
  permission_classes = [
    permissions.IsAuthenticated, IsStoryOwner
  ]
  serializer_class = UserSerializer

  def get_object(self):
    return self.request.user

但是,权限未出现在my API中,
“用户权限”:[]
仍为空

您可以使用SerializerMethodField。不要忘记这一点,Django会在您的IStoryowner返回False时向客户端发送403状态代码

class UserSerializer(ModelSerializer):
    user_permissions = SerializerMethodField()

    class Meta:
        fields = ('user_permissions', 'other_fields')
        model = YourUserModel

    def get_user_permissions(self, obj):
         request = self.context['request'] #
         return request.user.id == obj.story.author