我可能有一个简单的问题。我只想允许帖子的创建者删除或更新它。所有其他用户只能阅读该帖子。为此,我使用了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?