Django 如何从BasePermission中访问URL参数?
我正在尝试编写一个自定义rest_框架权限,以防止用户查询与他们不属于同一公司的信息。不幸的是,我似乎无法从Django 如何从BasePermission中访问URL参数?,django,django-rest-framework,Django,Django Rest Framework,我正在尝试编写一个自定义rest_框架权限,以防止用户查询与他们不属于同一公司的信息。不幸的是,我似乎无法从has\u permission()或has\u object\u permissions()中访问URL的任何参数 以下是我的路由器的开始: # Create a basic router router = routers.SimpleRouter() # Establish some variables to assist with nested routes root_elem =
has\u permission()
或has\u object\u permissions()
中访问URL的任何参数
以下是我的路由器的开始:
# Create a basic router
router = routers.SimpleRouter()
# Establish some variables to assist with nested routes
root_elem = 'companies'
root_elem_id = '/(?P<company_id>[0-9]+)'
loca_elem = '/locations'
loca_elem_id = '/(?P<location_id>[0-9]+)'
# Companies will be the root from which all other relations branch
router.register(r'' + root_elem, views.CompanyViewSet)
router.register(r'' + root_elem + root_elem_id + loca_elem,
views.LocationViewSet)
现在检查request.employee.is\u admin
只是我需要的一半-我还需要从URL访问公司id
,并确保它与管理员所在位置的公司id
匹配:
# Pseudocode
try:
user_location = Location.objects.get(id=request.employee.location_id)
return user_location.company_id == kwargs['company_id']
except ObjectDoesNotExist:
pass
我还没有弄清楚如何将这些参数传递到权限中,以便它可以执行这个额外的步骤。或者,也许有更好的方法来完成我想做的事情?如果您不能直接将它们传递进来(最好是这样),它们可以在请求对象上使用:
company_id = request.resolver_match.kwargs.get('company_id')
request.resolver\u match.args
和request.resolver\u match.kwargs
包含url中捕获的位置/关键字参数 除了knbk发布的正确响应之外,还可以使用传递给has_permission方法的view对象获取URL参数。像这样:
company\u id=view.kwargs.get('company\u id')
这工作做得很好!出于好奇,直接传入会是什么样子?我对DRF还是新手,所以我甚至不知道从哪里开始直接向许可证传递。我对DRF的了解还不够,无法在这方面帮助您。太好了,谢谢!
company_id = request.resolver_match.kwargs.get('company_id')