如何将DRF对象级权限与令牌一起使用?

时间:2020-05-20 14:07:56

标签: django django-rest-framework django-permissions django-rest-knox

我可能有一个简单的问题。我只想允许帖子的创建者删除或更新它。所有其他用户只能阅读该帖子。为此,我使用了Django Rest Framework的对象级权限。要验证用户身份,我使用django-rest-knox。 Knox为每个用户创建一个令牌进行身份验证。

权限

class PostOwnerPermssion(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

API

# Get User API
class UserAPI(generics.RetrieveAPIView):
  permission_classes = [
    permissions.IsAuthenticated, PostOwnerPermssion
  ]
  serializer_class = UserSerializer

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

但是,如果我现在使用Postman更新其他用户的帖子,我仍然可以这样做。例如,当我将用户12的令牌放入帖子请求的标题中时,我仍然可以编辑用户20创建的帖子。

我认为这样做的原因可能是Django不知道令牌属于哪个用户ID。

所以我的问题是,如何将Knox令牌转换为用户ID?

0 个答案:

没有答案
相关问题