restful——权限组件

一 权限简介

只用超级用户才能访问指定的数据,普通用户不能访问,所以就要有权限组件对其限制

二 局部使用

from rest_framework.permissions import BasePermission
# 只有超级会员才能访问books/
class MyPer(BasePermission):
    message = '您没有权限'

    def has_permission(self, request, view):
        # 取出当前登录用户
        user = request.user
        # 取出当前登录用户类型的中文
        tt = user.get_user_type_display()
        if user.user_type == 0:
            return True
        else:
            return False

class Course(APIView):
    permission_classes = [UserPermission,]

    def get(self, request):
        return HttpResponse('get')

    def post(self, request):
        return HttpResponse('post')

局部使用只需要在视图类里加入:

permission_classes = [UserPermission,]

三 全局使用

#在settings中配置
REST_FRAMEWORK={
    # "DEFAULT_PERMISSION_CLASSES":['app01.auth.MyPer'],
}

PS:关于在settings中配置的执行顺序

全局使用:
setting.py中配置
REST_FRAMEWORK={"DEFAULT_PERMISSION_CLASSES":['app01.auth.MyPer'],} 

-setting.authentication_classes:
-首先先去子类中找:authentication_classes=[AuthLogin]
-其次:去工程的配置文件找 -最后去drf源码的setting中找

四 源码分析

def check_permissions(self, request):
    for permission in self.get_permissions():
        if not permission.has_permission(request, self):
            self.permission_denied(
                request, message=getattr(permission, 'message', None)
                )

self.get_permissions()

def get_permissions(self):
     return [permission() for permission in self.permission_classes]

权限类使用顺序:先用视图类中的权限类,再用settings里配置的权限类,最后用默认的权限类

 

posted @ 2019-02-22 22:04  萤huo虫  阅读(132)  评论(0编辑  收藏  举报