gpt4 book ai didi

嵌套路由上的 Django REST 权限

转载 作者:行者123 更新时间:2023-12-03 18:42:03 26 4
gpt4 key购买 nike

我正在使用带有 nested router extension 的 Django REST 框架.我的路线之一看起来像:companies/$company/locations/$location哪里$company$location是 slug 变量。

我想允许用户发布到这个 URL:companies/$company/locations/添加新位置。我想确保执行 POST 的用户对他要发布的公司具有更正权限。我目前使用 django-guardian对于我的对象级权限。 POST 消息仅包含新位置的名称,它不包含可以从 URL 推断出的公司名称。
在这种情况下,我很难正确执行权限。我一直在设置 company新领域Location来自 View 集的对象 pre_save方法,但这对于应用权限检查来说太晚了。

强制执行此操作的最佳方法是什么?

如果用户确实在 POST 中包含公司,我可以通过将以下内容添加到 View 集中来验证公司:

def get_queryset(self):
parent = super(LocationViewSet, self).get_queryset()
return parent.filter(company__slug=self.kwargs['company_slug'])

最佳答案

好吧,我实际上找到了一种相当丑陋的方法来执行此操作,检索父对象并检查它是否属于请求的用户。

def create(self, request, *args, **kwargs):
request.data['catspad'] = kwargs['catspad_pk']
if not Catspad.objects.get(id=kwargs['catspad_pk']).owner == request.user:
return Response(status=HTTP_401_UNAUTHORIZED)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=HTTP_201_CREATED, headers=headers)

关于嵌套路由上的 Django REST 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24377878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com