首页 > 其他分享 >6.drf-权限

6.drf-权限

时间:2022-11-15 10:56:37浏览次数:46  
标签:return permission models request 权限 True drf

认证:判断用户是否登陆,从而获取用户的信息

权限:判断当前用户是否有权限访问API接口,例如:普通用户,管理员,超级管理员权限可能是不同的

下面通过案例进行介绍

模型类

from django.db import models


class UserInfo(models.Model):
    role_choices = ((1, "普通用户"), (2, "管理员"), (3, "超级管理员"),)
    role = models.IntegerField(verbose_name="角色", choices=role_choices, default=1)
    username = models.CharField(verbose_name="用户名", max_length=32)
    password = models.CharField(verbose_name="密码", max_length=64)
    token = models.CharField(verbose_name="TOKEN", max_length=64, null=True, blank=True)

权限类

from rest_framework.permissions import BasePermission

class MyPermission(BasePermission):
    message = {'code': 1000, 'data': '无权访问'}

    def has_permission(self, request, view):
        if request.user.role == 2:
            return True
        return False

    
    def has_object_permission(self, request, view, obj):
        return True

在自定义的权限类中继承BasePermission

  • has_permission:定义权限判断逻辑

  • has_object_permission:检查某个用户是否对数据库中数据是否有操作权限

    • RetrieveModelMixin

    • UpdateModelMixin

    • DestroyModelMixin

  • message:在权限不同过时返回个前端数据

订单视图类

 

class OrderView(APIView):
    permission_classes = [MyPermission, ]

    def get(self, request, *args, **kwargs):
        print(request.user)
        print(request.auth)
        return Response({
            'code': 0,
            'data': '订单数据'
        })
  • 在视图类中设置类变量 permission_classes的值为 认证类 MyPermission,表示此视图在执行内部功能之前需要先经过权限校验。

  • 权限类是可以使用多个的,从上面中列表就可以知道

 

 

关于多个权限类

在开发中需要对用户进行多个权限的校验(都必须通过),可以使用多个权限类

当我们使用了多个权限类时,会按照列表顺序,逐个执行权限类的has_permission 方法,如果返回True则执行下一个权限类,如果返回None或者False,则抛出权限异常并停止权限校验

 

全局配置

REST_FRAMEWORK = {
    "DEFAULT_PERMISSION_CLASSES":["xxxx.xxxx.xx.类名","xxxx.xxxx.xx.类名",]
}

 

底层源码实现

 

 

关于has_permission的返回值

  • 返回True:执行下一个权限验证类

  • 返回None或者False,抛出权限验证失败的异常

标签:return,permission,models,request,权限,True,drf
From: https://www.cnblogs.com/victor1234/p/16891655.html

相关文章

  • (更新中..)【Saas】从入门到精通-基本管理设计:权限管理/角色管理/组织管理/成员管理
    前言第一次接触Saas(Serviceasasoft),用此博客记录本人从0-1摸索企业管理(OA)平台的设计思路及中途所遇见的坑,共勉。背景设计一个OA管理平台,此篇重点讲述通用的基......
  • 68.说下后台项目的权限管理
    现在的权限管理都是基于RBAC实现的,添加了角色这一中间层;具体操作:1.在本地实例化路由实例的时候,只要把静态路由规则注入到实例里,动态路由规则定义好,但是现在不注入;......
  • 5.drf-认证
    在开发后端API的时候,不同的功能可能有不同的限制,如无需验证:API可以直接访问需要验证:API只有用户通过验证才可以访问这个时候我们就可以使用DRF提供的认证组件,下面......
  • 4.drf-版本管理
    根据RESTful规范,后端API中需要体现出版本,DRF中支持5种版本的设置,常见的三种如下1.URL的GET中传递参数在视图类中定义fromrest_framework.versioningimportQueryP......
  • 小新Java8-【final、权限、内部类、引用类型】
    一、final关键字1.概述final:不可改变。可以用于修饰类、方法和变量。类:被修饰的类,不能被继承。方法:被修饰的方法,不能被重写。变量:被修饰的变量,不能被重新赋值。2.......
  • 3.drf使用配置&请求封装
    1.drf使用配置1.1安装pipinstalldjangorestframework==3.12.4版本要求djangorestframework==3.12.4python(3.5-3.9)Django(2.2,3.0,3.1)djangores......
  • 关于System x3650 M4-Exsi-服务器的IMM接口创建只读权限的audit账号
    IMM全称为: IntegratedManagementModule,是IBM服务器的服务器远程管理接口系统本文服务器型号:IBM Systemx3650M4-安装的Exsi系统操作:登录IMM,创建只读权限的audi......
  • C基础学习笔记——01-C基础第02天(用户权限、VI操作、Linux服务器搭建)
    在学习C基础总结了笔记,并分享出来。01-C基础第02天(用户权限、VI操作、Linux服务器搭建) 打开终端:ctrl+alt+t清屏:ctrl+l或clear在终端中退出锁定:ctrl+c 目录3常用命令4......
  • 16.Linux-默认权限控制命令umask
    1.umaskLinux中umask的工作方式与chmod命令类似,它也用于定义文件或目录的权限。它们之间的区别在于chmod用于改变已有文件或目录的权限,而umask用于定义新建文件或目录的......
  • 访问权限修饰符、this关键字
    目录访问权限修饰符this关键字访问权限修饰符构造器构造器的作用:创建对象初始化对象的信息如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器......