Django 如何从BasePermission中访问URL参数?

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 =

我正在尝试编写一个自定义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 = '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')