【发布时间】:2020-09-21 09:24:52
【问题描述】:
我已经为更新方法设置了权限,只允许管理员用户更新用户信息,但由于某些原因,当我以普通用户身份登录时,我也可以更新用户信息。我能做些什么来避免这种情况?其他方法也可以。
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]
【问题讨论】:
-
使用哪种 http 方法来更新值? HTTP PUT 还是 HTTP PATCH?
-
是补丁法
-
如果我使用 put 方法,它会显示
password field is required