Loading

权限组件及源码分析

权限组件

​ 通过观察APIView的源码,会发现他的里面执行了三个方法

    self.perform_authentication(request) # 认证
    self.check_permissions(request)# 权限
    self.check_throttles(request)# 频率

​ 也由此看出,权限是在认证之后执行的

权限类的编写

  1. 写一个类,继承BasePermission
  2. 重写has_permission 方法
  3. 在其内部进行权限校验的定义
    • 有权限返回True
    • 无权限返回False
  4. 定制返回提示
    • 通过定义self.message = xxx
from rest_framework.permissions import BasePermission

class SuperPermission(BasePermission):
    # 继承BasePermission类
    # 重写has_permission方法
    # 拿到当前用户 ---》 查看权限 ---》如果权限足够 return True ---》 不够 return False
    def has_permission(self, request, view):
        user_type = request.user.user_type
        if user_type == '3':
            return True
        else:
            # 定制返回提示
            self.message = '权限不足'
            return False

权限类的使用

  1. 局部使用
  2. 全局使用
  3. 局部禁用
# 局部使用 
class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    authentication_classes = [CommonAuthentication]
    # 重写 permission_classes  列表里面填自己定义的权限类
     permission_classes = [SuperPermission]
        
# 全局使用
REST_FRAMEWORK = {
    # 权限
    'DEFAULT_PERMISSION_CLASSES': []
}

# 局部禁用
class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    authentication_classes = [CommonAuthentication]
    # 视图类里面定义空列表
     permission_classes = []
posted @ 2024-04-21 21:59  HuangQiaoqi  阅读(3)  评论(0编辑  收藏  举报