django rest framework的基于操作的权限。
django-rest-action-permissions的Python项目详细描述
django rest操作权限
django-rest-action-permissions允许您为viewset类提供的每个操作定义权限。
安装
使用pip安装:
$ pip install django-rest-action-permissions
使用量
此库允许您定义如下权限:
# permissions.pyfromrest_framework.permissionsimport(AllowAny,BasePermission,IsAdminUser,IsAuthenticated)fromrest_action_permissions.permissionsimportActionPermissionclassIsTweetOwner(BasePermission):defhas_object_permission(self,request,view,obj):returnobj.owner==request.userclassTweetPermission(ActionPermission):# The admin user has all permissions.enough_perms=IsAdminUser# Corresponding permissions for each action.create_perms=IsAuthenticatedretrieve_perms=AllowAnylist_perms=AllowAnyupdate_perms=IsTweetOwnerdelete_perms=IsTweetOwnerretweet_perms=IsAuthenticatedundo_retweet_perms=IsAuthenticated# General read/write permissions.# Used if corresponding action permission hasn't been specified.read_perms=AllowAnywrite_perms=IsAuthenticated&IsTweetOwner
上面定义的权限对应的视图集:
# views.pyfromrest_frameworkimportviewsetsfromrest_framework.decoratorsimportdetail_routefrom.modelsimportTweetfrom.permissionsimportTweetPermissionfrom.serializersimportTweetSerializerclassTweetViewSet(viewsets.ModelViewSet):queryset=Tweet.objects.all()serializer_class=TweetSerializerpermission_classes=(TweetPermission,)defperform_create(self,serializer):serializer.save(owner=self.request.user)@detail_route(methods=['POST'])defretweet(self,request,*args,**kwargs):...@detail_route(methods=['POST'])defundo_retweet(self,request,*args,**kwargs):...
学分
这个库的接口是受taiga项目启发的。