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

时间:2014-03-06 08:13:54

标签: 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

(与教程非常相似)

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

由于

1 个答案:

答案 0 :(得分: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)

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