Django Rest Framework custom permissions per view

django-rest-framework, permissions

Solution

Well, the first step could be done easy with DRF. See http://www.django-rest-framework.org/api-guide/permissions#custom-permissions.

You must do something like that:

from functools import partial

from rest_framework import permissions

class MyPermission(permissions.BasePermission):

    def __init__(self, allowed_methods):
        super().__init__()
        self.allowed_methods = allowed_methods

    def has_permission(self, request, view):
        return request.method in self.allowed_methods


class ExampleView(APIView):
    permission_classes = (partial(MyPermission, ['GET', 'HEAD']),)

Problem

I want to create permissions in Django Rest Framework, based on view + method + user permissions. Is there a way to achieve this without manually writing each permission, and checking the permissions of the group that the user is in? Also, another problem I am facing is that permission objects are tied up to a certain model. Since I have views that affect different models, or I want to grant different permissions on the method PUT, depending on what view I accessed (because it affects different fields), I want my permissions to be tied to a certain view, and not to a certain model. Does anyone know how this can be done? I am looking for a solution in the sort of: Create a Permissions object with the following parameters: `View_affected`, `list_of_allowed_methods(GET,POST,etc.)` Create a Group object that has that permission associated Add a user to the group Have my default permission class take care of everything. From what I have now, the step that is giving me problems is step 1. Because I see no way of tying a Permission with a View, and because Permissions ask for a model, and I do not want a model.

Original source