在ListAPIView中仅查看所有者的数据

Fla*_*ois 2 permissions django-rest-framework

我有一个从ListAPIView派生的视图,具有以下权限:

permission_classes = (permissions.IsAuthenticated, IsOwnerOrSuperuser, )

IsOwnerOrSuperuse定义如下:

class IsOwnerOrSuperuser(permissions.BasePermission):

def has_object_permission(self, request, view, obj):
    return obj.user == request.user or request.user.is_superuser
Run Code Online (Sandbox Code Playgroud)

(这与教程非常相似)

现在,当普通用户查询我的视图时,它可以看到每个人的对象.是否将权限应用于列表中的每个对象?如何以最小的开销强制执行此类行为?

谢谢

alm*_*lki 5

不,has_object_permission不应用于列表和创建端点,仅检索,更新和删除只有单个实例的地方.要过滤列表,您应该使用get_queryset过滤对象.

class BlogList(generics.ListAPIView):
    serializer_class = BlogSerializer
    permission_classes = (IsOwnerOrSuperuser,)

    def get_queryset(self):
        user = self.request.user
        return Blog.objects.filter(user=user)
Run Code Online (Sandbox Code Playgroud)

要应用更多权限,您需要实现.has_permission(self, request, view)....