如何解决如何以安全的方式为 UserList 设置权限类
通过此实现,API 端点中的任何人都可以看到整个用户列表。例如,如果我将权限类更改为 IsAdmin,则用户无权访问他们自己的用户。只返回当前用户的安全方法是什么?是否可以在 get_queryset() 函数中仅过滤掉该用户?
class UserList(mixins.ListModelMixin,mixins.CreateModelMixin,generics.GenericAPIView):
serializer_class = UserSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
def get(self,request,*args,**kwargs):
self.serializer_class = UserGetSerializer
return self.list(request,**kwargs)
def post(self,**kwargs):
return self.create(request,**kwargs)
def get_queryset(self):
qs = get_user_model().objects.all()
if self.request.user:
# Return the currently logged in user
status = self.request.query_params.get("user",None)
if status and status == "current":
qs = get_user_model().objects.filter(pk=self.request.user.pk)
return qs
解决方法
在我看来,您似乎已经实现了目标 - 您在 get_queryset
中正确过滤。这是我们在 Djoser
中的实现,它是 DRF 最流行的 REST 身份验证库。
请注意,我们有 /me
端点,这在要求“你自己”时很常见。有关详细信息,请查看 Designing URI for current logged in user in REST applications 问题。
无论如何,与用户相关的一切通常都很奇怪。如果我试图实现你所做的,我可能会在 NotFound
中提出 get_queryset
,因为实际上你不需要它。
如果您的目标是在他请求没有 user
的 GET pk
资源时返回用户数据,那么应该可以这样做
def list(self,request,*args,**kwargs):
serializer = self.serializer_class(self.request.user)
return Response(serializer.data)
和 afaik create
不需要 queryset
。对于用户名/邮件重复,在序列化程序中添加验证器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。