Masza
Masza

Reputation: 351

How to access named url arguments in permissions with Django REST Framework?

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

Answers (3)

Nadhem Maaloul
Nadhem Maaloul

Reputation: 433

You can find them in:

request.resolver_match.kwargs.get('attribute_name')

Upvotes: 7

aman kumar
aman kumar

Reputation: 3156

you can access from the view.kwargs.

Upvotes: 23

Daniel Roseman
Daniel Roseman

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

Related Questions