我按照文档实施了DRF。我发现,一旦验证了用户身份,就可以允许用户获取系统中任何用户的数据。
我已经按照this文档实施了过滤。
我仔细阅读了权限文档,找不到基于所有者过滤掉查询集的方法。在我的一种视图中,我正在检查所有者是否与请求的用户相同。
我的问题是,我是否必须在所有视图集中都这样做?或有一种通用的方法可以检查这种情况?
答案 0 :(得分:1)
不确定,这是否是最好的方法,但是我通过覆盖get_queryset来做到这一点
f(g)
使用权限类进行操作
def get_queryset(self):
queryset = YOUR_MODEL.objects.filter(user_id=self.request.user.id)
return queryset
一些解释。 class IsInUserHierarchy(permissons.BasePermission):
def has_permission(self, request, view):
return bool(isinstance(request.user, UserClassHierarchy))
类与IsInUserHierarchy
非常相似。它使用简单的python isinstance()方法检查request.user是否在所需的类中(从模型中导入IsAdminUser
)
答案 1 :(得分:0)
只需创建一个权限文件,然后添加以下内容:
class IsOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
# Instance must have an attribute named `owner`.
return obj.owner == request.user
然后,在您的ViewSet中,使用以下权限类:
class MyViewSet(viewsets.ViewSet):
permission_classes = (IsOwner,)
现在,只需将权限文件导入您想使用此逻辑的任何位置,而不必重复任何代码