Created
December 16, 2020 19:08
-
-
Save gtindo/0f7b45cc7e9ded61d743fec2d5095eac to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from rest_framework.viewsets import ModelViewSet | |
from rest_framework.permissions import IsAuthenticated, AllowAny, IsAdminUser | |
from blog.models import Post | |
from blog.serializers import PostSerializer | |
class CustomModelViewset(viewsets.ModelViewSet): | |
""" | |
A class that inherits from ModelViewset and allow to add custom permissions on your views | |
without redefine methods | |
""" | |
default_permission = IsAuthenticated | |
list_permissions = [default_permission] | |
create_permissions = [default_permission] | |
retrieve_permissions = [default_permission] | |
update_permissions = [default_permission] | |
destroy_permissions = [default_permission] | |
def get_permissions(self): | |
permissions = { | |
"list": [permission() for permission in self.list_permissions], | |
"create": [permission() for permission in self.create_permissions], | |
"retrieve": [permission() for permission in self.retrieve_permissions], | |
"update": [permission() for permission in self.update_permissions], | |
"partial_update": [permission() for permission in self.update_permissions], | |
"destroy": [permission() for permission in self.destroy_permissions] | |
} | |
try: | |
return permissions[self.action] | |
except KeyError: | |
return [permission() for permission in self.permission_classes] | |
# Usage | |
class PostViewset(CustomModelViewset): | |
# define serializer and queryset | |
serializer_class = PostSerializer | |
queryset = Post.objects.all() | |
# define permissions for each method of viewset | |
list_perimissions = [AllowAny] | |
retrieve_permissions= [AllowAny] | |
create_permissions = [IsAdminUser] | |
delete_permissions = [IsAdminUser] | |
update_permissions = [IsAdminUser] | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment