未调用 Django REST Framework 视图权限

Django REST Framework view permissions not called

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

Source: 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

不幸的是,我的视图似乎甚至没有调用我的自定义权限 class。 (我导入它等)如果我没有使用我的自定义权限 class,我会使用像 permissions.isAuthenticatedOrReadOnly 这样的默认权限来代替。我在这里错过了什么?

谢谢。

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

您的视图只有 list 和 create 端点,它们都不使用 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)