pip install djangorestframework-role-filtersWhy i wrote this project?
I want work easily with roles without multiple ifs in code
Create role_filters.py with your roles definitions
from rest_framework_role_filters.role_filters import RoleFilter from .serializers import PostSerializerForUser class AdminRoleFilter(RoleFilter): role_id = 'admin' class UserRoleFilter(RoleFilter): role_id = 'user' def get_allowed_actions(self, request, view, obj=None): # This example returns same list both for "global permissions" check, # and for "object" permissions, but different list may be returned # if `obj` argument is not None, and this list will be used to check # if action is allowed during call to `ViewSet.check_object_permissions` return ['create', 'list', 'retrieve', 'update', 'partial_update'] def get_queryset(self, request, view, queryset): queryset = queryset.filter(user=request.user) return queryset def get_serializer_class(self, request, view): return PostSerializerForUser def get_serializer(self, request, view, serializer_class, *args, **kwargs): fields = ( 'body', 'created_at', 'id', 'serializer_name', 'title', 'updated_at', 'user', ) return serializer_class(*args, fields=fields, **kwargs)
Create viewset and override get_role_id method
from rest_framework_role_filters.viewsets import RoleFilterModelViewSet from .models import Post from .role_filters import AdminRoleFilter, UserRoleFilter from .serializers import PostSerializer class PostViewSet(RoleFilterModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer role_filter_classes = [AdminRoleFilter, UserRoleFilter] def get_role_id(self, request): return request.user.role.role_id def perform_create(self, serializer): serializer.save(user=self.request.user)
If role_id is 'admin':
Post.objects.all()
serializer_class
is used - PostSerializer
get_serializer
method is usedIf role_id is 'user':
serializer_class=PostSerializerForUser
is usedfields
kwargs (e.g. for modified serializer as described in DRF: Dynamically modifying fields)Check testapp example code implementation.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4