drf-------权限组件

# 大家都登录了,但有的功能(接口),只有超级管理员能做,有的功能所有登录用户都能做----》这就涉及到权限的设计了

# 权限设计:比较复杂---》有acl,rbac,abac。。。

# 咱们现在只是为了先讲明白,drf的权限组件如何用,咱们先以最简单的为例
    -查询所有图书:所有登录用户都能访问(普通用户和超级管理员)
        -其实没有权限控制
    -删除图书,只有超级管理员能访问
        -给其它用户设置的权限
        
# 自定义权限类的使用步骤
    1 写一个类,继承BasePermission
    2 在类中写方法:has_permission  ------->是对
        -如果有权限,就返回True
        -如果没有权限,就返回False
        -错误信息是self.message='字符串'
        
    3 局部使用
    class BookDetailView(APIView):
        permission_classes = [AdminPermission, ]
    4 全局使用
        REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': [
            'app01.permission.AdminPermission'
        ],

        }
    5 局部禁用
    class BookView(APIView):
        permission_classes = []

    6 has_permission在请求进来的时候就开始了属于DRF的三大认证,返回True就能访问,False就禁止访问
has_object_permissions是对某个对象的访问权限,默认是True

        可以根据request对象和obj对象判断:该对象是否可以返回给该request请求,返回True或者False。

  • 调用的时机:在get_object方法中调用

        

    7 除了IsAuthenticatedOrReadOnly 类,DRF自带的常用权限类还包括:

  • IsAuthenticated类:仅限已经通过身份验证的用户访问;
  • AllowAny类:允许任何用户访问;
  • IsAdminUser类:仅限管理员访问;
  • IsAuthenticated类 ;认证通过

  • DjangoModelPermissions类:只有在用户经过身份验证并分配了相关模型权限时,才会获得授权访问相关模型。
  • DjangoModelPermissionsOrReadOnly类:与前者类似,但可以给匿名用户访问API的可读权限。
  • DjangoObjectPermissions类:只有在用户经过身份验证并分配了相关对象权限时,才会获得授权访问相关对象。通常与django-gaurdian联用实现对象级别的权限控制。

小案例

from rest_framework.permissions import BasePermission


class AdminPermission(BasePermission):
    def has_permission(self, request, view):
        # 如果有权限,就是返回True,没有权限,返回False
        # 判断user_type是不是 1,根据当前登录用户
        # request.user  # 就是当前登录用户,一旦来到这里,认证就通过了
        if request.user.user_type == 1:  # 一定要注意类型#####
            return True
        else:
            # 错误信息
            self.message = '您好:%s,您没有权限' % request.user.name
            return False

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值