You can create custom Roles
and Permissions
using the Imagine smart compiler.
Something like the following should work:
Permission A
Permission B
Permission C
Permission D
API /api1 {
actions [Create, Read, ReadMany, Delete]
permissions [A]
}
....
Compile it:
imagine compile myapp.im
This would generate:
permissions.py
from rest_framework import permissions
class A(permissions.BasePermission):
def has_permission(self, request, view):
return request.user and request.user.has_perm('app.A')
class B(permissions.BasePermission):
def has_permission(self, request, view):
return request.user and request.user.has_perm('app.B')
class C(permissions.BasePermission):
def has_permission(self, request, view):
return request.user and request.user.has_perm('app.C')
class D(permissions.BasePermission):
def has_permission(self, request, view):
return request.user and request.user.has_perm('app.D')
views.py
from .models import Product
from .permissions import A
from .serializers import ProductSerializer
class Api1ViewSet(viewsets.GenericViewSet, mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, mixins.DestroyModelMixin):
queryset = Product.objects.all()
serializer_class = ProductSerializer
permission_classes = [A]
filterset_fields = ['id', 'name', 'price', 'description']