Reputation: 351
I have an url config like
url(r'^user/(?P<id>[0-9]+)/$', UserView.as_view())
And a view class like
class UserView(GenericAPIView):
serializer_class = UserSerializer
permission_classes = [MyCustomPermission]
def get(self, request, id):
# code...
The permission is like
class MyCustomPermission(BasePermission):
def has_permission(self, request, view, *args, **kwargs):
# code
How do I access id
in MyCustomPermission
? I can't find it from the request
or from *args
or *kwargs
. Documentation doesn't say anything about this. I've tried to look the source code but can't find how to access those named url arguments. Is it even possible?
Upvotes: 14
Views: 5213
Reputation: 433
You can find them in:
request.resolver_match.kwargs.get('attribute_name')
Upvotes: 7
Reputation: 600041
This is the wrong approach. Rather than trying to access keyword arguments there, you should be using object-level permissions and checking has_object_permission
in your permission class.
Upvotes: 11