Django REST Framework视图权限未调用

问题描述

我试图为我的视图创建一个自定义权限,该权限允许对QuerySet中的模型所有者的读写权限,但不允许对其他用户或未经身份验证的用户进行任何权限/请求。

来源:https://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

查看:

class My_classListCreateAPIView(generics.ListCreateAPIView):
    queryset = Model.objects.all()
    serializer_class = ModelSerializer
    permission_classes = [IsModelOwner]

权限:

class IsModelOwner(permissions.BasePermission):

    def has_object_permission(self,request,view,obj):
        # Permissions are only allowed to the owner of the model and admins.
        if request.user.is_staff == True:
            return True
        return obj.owner == request.user

不幸的是,看来我的观点甚至没有调用我的自定义权限类。 (我导入了它,等等。)如果我使用认的类似permissions.isAuthenticatedOrReadOnly的替代我的自定义权限类,则使用它。我在这里想念什么?

谢谢。

解决方法

has_object_permission方法仅在对象上调用,而不在查询集上调用,这意味着在列表请求中不会调用它。

您的视图仅具有列表和创建终结点,都不使用object_permissions,而是使用has_permission

但是我相信您实际上想在视图中结合使用isAuthenticated权限和修改的get_queryset

class My_classListCreateAPIView(generics.ListCreateAPIView):
    queryset = Model.objects.all()
    serializer_class = ModelSerializer
    permission_classes = [isAuthenticated]

    def get_queryset(self):
        return Model.objects.filter(owner=self.request.user)