如何为不同的http请求申请不同的权限类

How to apply different permission classes for different http requests

我有一个 UserViewSet 支持获取、post、修补和删除 HTTP 请求。我有不同角色的管理员,有些可以删除用户,有些则不能。

我想编辑我的 UserViewSet 以支持此功能。

我试过这样做:

class UserViewSet(ModelViewSet):
    queryset = User.objects.all()
    http_method_names = ['get', 'post', 'patch', 'delete']

    def get_serializer_class(self):
        if self.request.method == 'PATCH':
            self.permission_classes = [CanEdit]
            return UpdateUserSerializer
        elif self.request.method == 'DELETE':
            self.permission_classes = [CanDelete]
        return UserSerializer

我不确定这是否是执行此操作的最佳做​​法。

您可以更改 get_permissions 方法,这是通常的方法:

    def get_permission_classes(self):
    if self.action in ['retrieve', 'update', 'partial_update']:
        return [(IsAuthenticated & IsSelf) | IsAdminUser]

或使用 DRF 扩展作为结合序列化程序和权限的通用配置视图: https://github.com/drf-psq/drf-psq

    psq_rules = {
    ('retrieve', 'update', 'partial_update'): [
        Rule([IsAdminUser], UserFullSerializer),
        Rule([IsAuthenticated & IsSelf], UserBasicSerializer)
    ]
}