Django rest framework 在Django rest框架中更新用户信息权限
我已将更新方法的权限设置为仅允许管理员用户更新用户信息,但由于某些原因,当我以普通用户身份登录时,我也可以更新用户信息。我能做些什么来避免这种情况?其他方法也可以Django rest framework 在Django rest框架中更新用户信息权限,django-rest-framework,Django Rest Framework,我已将更新方法的权限设置为仅允许管理员用户更新用户信息,但由于某些原因,当我以普通用户身份登录时,我也可以更新用户信息。我能做些什么来避免这种情况?其他方法也可以 class CustomUserViewSet(viewsets.ModelViewSet): queryset = models.CustomUser.objects.all() serializer_class = serializers.CustomUserSerializer parser_classe
class CustomUserViewSet(viewsets.ModelViewSet):
queryset = models.CustomUser.objects.all()
serializer_class = serializers.CustomUserSerializer
parser_classes = [JSONParser]
permission_classes_by_action = {
'create': [IsAdminUser], 'list': [IsAdminUser], 'retrieve': [IsAuthenticated],
'update': [IsAdminUser], <--already set here
'destroy': [IsAdminUser,]
}
def update(self, request, *args, **kwargs):
return super(CustomUserViewSet, self).update(request, *args, **kwargs)
# some other methods
def get_permissions(self):
try:
# return permission_classes depending on `action`
return [permission() for permission in self.permission_classes_by_action[self.action]]
except KeyError:
# action is not set return default permission_classes
return [permission() for permission in self.permission_classes]
class CustomUserViewSet(ViewSet.ModelViewSet):
queryset=models.CustomUser.objects.all()
serializer\u class=serializers.CustomUserSerializer
parser_classes=[JSONParser]
权限\u类\u按\u操作={
“创建”:[IsAdminUser],“列表”:[IsAdminUser],“检索”:[IsAuthenticated],
“更新”:[IsAdminUser],在DRF视图集中,HTTP修补程序方法映射为动作名称部分更新
。因此,您必须按以下方式更新权限类
permission_classes_by_action = {
'create': [IsAdminUser],
'list': [IsAdminUser],
'retrieve': [IsAuthenticated],
'update': [IsAdminUser],
'partial_update': [IsAdminUser],
'destroy': [IsAdminUser, ]
}
permission\u classes\u by\u action={
“创建”:[IsAdminUser],
“列表”:[IsAdminUser],
“检索”:[IsAuthenticated],
“更新”:[IsAdminUser],
“部分更新”:[IsAdminUser],
“销毁”:[IsAdminUser,]
}
哪个http方法用于更新值?http PUT还是http PATCH?它的修补方法如果我使用PUT方法,它会说密码字段是必需的
我已经尝试过了。使用patial\u update
我得到了两种方法PUT
和PATCH
。我仍然可以更新补丁中的用户信息,如果我使用PUT,它就会更新sayspassword字段是require
删除try…except
子句,看看当我写下你说的内容并删除try和exept并只保留第一个return语句时发生了什么,它说return[permission()for permission in self.permission\u classes\u by\u action[self.action]]KeyError:None
现在可以使用了,谢谢!我从来没有注意到我必须同时进行更新
和部分更新
。谢谢。