DRF从入门到精通九(权限控制)

news2025/1/19 14:28:51

文章目录

  • 一、权限控制模型
    • 1) ACL(Access Control List,访问控制列表)
    • 2) RBAC(Role-Based Access Control,基于角色的访问控制)
      • 应用
      • 前后台权限控制
      • 实操
    • 3) ABAC(Attribute-Based Access Control,基于属性的访问控制)

一、权限控制模型

1) ACL(Access Control List,访问控制列表)

将用户或组等使用者直接与对象的权限对接。

互联网,对外项目
	-用户可以:
		user_id:1=[刷视频,评论,收藏,开直播]
		user_id:2=[刷视频]
	-,表示出权限
		用户表:
			id   name
			1    王叔
			2    李四
			3    张三
		权限表:
			id  user_id   permission_id
			1    1        1
			2    1        2
			3    1        3
			4    1        4
			5    2        1
		
		权限详情表:
			id  name        url      method
			1    刷视频      /video/     get
			2    评论        /commit/   post
			3    收藏        
			4    开直播
	
	-权限类:根据当前登录用户---》取出它所有权限,权限列表---》当前访问的比如是评论,如果有权限,返回True,没有权限,返回false

2) RBAC(Role-Based Access Control,基于角色的访问控制)

RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

将用户与角色对接,然后角色与对象的权限对接。

	rbac权限控制:基于角色的访问控制 Role-Based Access Control
    	-公司内部项目
        -用户属于某个角色
        -角色跟权限有对应关系
        - 公司内有 财务   hr  开发 总裁
        	-财务:张三,李四  :发工资权限,扣工资权限
            -hr:  王铁锤,王五     :招员工,开除员工
            -开发:张二蛋,李小红: 看代码 开发代码,删除代码
            -总裁:lqz         :查看公司财报
        -rbac表设计
        	-用户表:用户和角色是    多对多
            -角色表(部门,组): 角色和权限  多对多
            -权限表:
            -用户和权限:多对多
            -总共6 张表,表示基于角色的访问控制:rbac+acl
            -django的后台管理就是基于rbac控制---》auth下有些表
                auth_user:# 用户表
                auth_group:# 组表(角色)
                auth_permission:# 权限表
                auth_group_permissions # 组和权限中间表
                auth_user_groups # 用户和组 中间表
                auth_user_user_permissions# 用户和权限多对多中间表
	        -演示rbac权限控制
            	-创建一个超级用户 root  123456 对网站有所有权限
                -创建一个用户[张三],创建一个组[测试组1],给测试组1加权限[book的增删查改]
                -张三登录,发现张三有 测试组1的所有权限
                -新增用户李四,没有任何组,登录后没有任何权限
                -把李四放到 测试组1 ,有测试组1的所有权限:查看图书,修改图书,删除图书
                
                -李四增加一个新增图书权限:
                	-新增图书权限 加入到 测试组1  张三也有这个权限,不好
                    -单独给李四增加一个 新增图书权限 

应用

	RBAC - Role-Based Access Control
	Django的 Auth组件 采用的认证规则就是RBAC
	
	1)像专门做人员权限管理的系统(CRM系统)都是公司内部使用,所以数据量都在10w一下,一般效率要求也不是很高
	2)用户量极大的常规项目,会分两种用户:前台用户(三大认证) 和 后台用户(BRAC来管理)
	结论:没有特殊要求的Django项目可以直接采用Auth组件的权限六表,不需要自定义六个表,也不需要断开表关系,单可能需要自定义User表

前后台权限控制

	1)后台用户对各表操作,是后台项目完成的,我们可以直接借助admin后台项目(Django自带的)
	2)后期也可以用xadmin框架来做后台用户权限管理
	
	3)前台用户的权限管理如何处理
	  定义了一堆数据接口的视图类,不同的登录用户是否能访问这些视图类,能就代表有权限,不能就代表无权限
	  前台用户权限用drf框架的 三大认证

实操

models.py

	class UserInfo(models.Model):
	    username = models.CharField(max_length=32)
	    password = models.CharField(max_length=32)
	    age = models.IntegerField(null=True)
	    gender = models.IntegerField(default=1, choices=((1, '男'), (2, '女'), (3, '未知')))


	class Book(models.Model):
	    name = models.CharField(max_length=32)
	    price = models.IntegerField()

	'迁移成功后,创建一个超级用户:createsuperuser'

admin.py

	from . import models
	admin.site.register(models.Book)

这样就可以操作后台管理系统了

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


3) ABAC(Attribute-Based Access Control,基于属性的访问控制)

ABAC(Attribute-Based Access Control,基于属性的访问控制),又称为PBAC(Policy-Based Access Control,基于策略的访问控制),CBAC(Claims-Based Access Control,基于声明的访问控制)。

传统的ACL、RBAC的架构是{subject,action,object},而ABAC的架构是{subject,action,object,contextual}且为他们添加了parameter(参数)。

  • subject属性:比如用户的年龄、部门、角色、威望、积分等主题属性。
  • action属性:比如查看、读取、编辑、删除等行为属性。
  • object属性:比如银行账户、文章、评论等对象或资源属性。
  • contextual属性:比如时段、IP位置、天气等环境属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1357729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dart 学习 区分好setter,getter和一般的函数

看看代码可以很好的分析 setter ,getter 和普通的函数有什么区别 void main() {car a new car("奔驰", 12);print(a.name);a.age 100;print(a.age);a.setname "宝马"; // 调用 setterprint(a.getage); // 调用gettera.setter("雷克萨斯…

React Hooks中useState的介绍,并封装为useSetState函数的使用

useState 允许我们定义状态变量,并确保当这些状态变量的值发生变化时,页面会重新渲染。 useState 返回值 const [state, setState] useState(initialState);useState 返回一个长度为 2 的数组。通常,我们这样定义状态变量: co…

经纬度的作用

当我们在手机上使用导航软件或者在网上查找地址时,经常会发现一个选项,就是显示当前位置的经纬度。那么,什么是经纬度,它有什么作用呢? 经纬度是用来确定地球上任何一个点位置的坐标系统。它由两个数值组成&#xff0…

华为DriveONE电机控制器拆解实拍

如果说之前的问界M5、M7,华为让我们看到其在智能化上确实拥有遥遥领先的能力,那么在智界S7上,则让我们看到华为在动力、底盘这些硬件执行层面,竟然也有不输给很多车企的实力。1、华为电驱,全球第一?在智界S…

手游开发项目经验简单总结

这是我最近一个完整的手游开发项目的总结信息,请大家指点 目录 引擎 语言 编辑器 项目开发模块规划分 主项目工程,UI资源项目工程,模型场景资源项目工程 热更框架 前后端协议 UI 图集 多语言适配 SLG场景和其他场景 战斗 美术模型资源 人物…

Glide加载不出图片与请求浏览器资源时中文转码问题

报错代码如图:Image load failed: Failed to load resourse 首先确保你的图片 URL 地址是正确的,可以通过在浏览器中直接访问这个 URL 来测试。另外,确保 URL 地址不包含特殊字符或空格,以免影响加载。 然后确定依赖库没有问题&am…

支持下载和阅读的漫画管理工具Teemii

什么是 Teemii ? Teemii 是一款专为狂热漫画读者设计的精简 Web 应用程序。它为阅读和管理漫画集提供了一个简单而高效的平台。主要功能包括跨平台访问、浏览器内阅读、强大的元数据聚合器以及馆藏自动更新。Teemii 是专为那些寻求更加个性化和自主的方法来管理漫画…

学习汽车LIN总线该如何入门?

关注菲益科公众号—>对话窗口发送 “CANoe ”或“INCA”,即可获得canoe入门到精通电子书和INCA软件安装包(不带授权码)下载地址。 目录 1. 车载LIN总线诞生背景和使用场景 2. LIN总线硬件接口 3. Lin总线协议 4. 总结 1、车载LIN总线…

VSCode远程开发配置和SSH免密登录

目录 概要远程开发插件安装开始连接SSH免密登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码,使用远程开发,可以在与生产环境相同的环境中开发、测试和部署代码,减少因环境不同而导致的问题。本文将详细介绍如何通过VSCode连…

(02)半导体前道制程工艺概览

01、半导体制程工艺概览 在第一篇的最后,我们说到金属氧化物半导体场效应晶体管(MOSFET)的平面式结构让人们可以在晶圆上同时制造出好几个MOSFET。且与第一代晶体管BJT不同,MOSFET无需焊接过程。本期内容就让我们来详细了解一下具体的制程工艺。 为方便讲解,我们先来看一…

电脑报错“KBDRU.DLL文件丢失,软件无法启动”,KBDRU.DLL文件下载,修复方法

很多用户在日常使用电脑的时候,或多或少都遇到过,在启动游戏或软件的时候,Windows桌面会弹出错误提示框“KBDSN1.DLL文件缺失,造成软件无法启动或运行,请尝试重新安装解决”。 不少用户,会根据提示重装游戏…

Spark四:Spark Streaming和Structured Streaming

简介 Spark Streaming整体流程和DStream介绍 Structured Streaming发展历史和Dataflow模型介绍 Spark Streaming 是一个基于 Spark Core 之上的实时计算框架,从很多数据源消费数据并对数据进行实时的处理,具有高吞吐量和容错能力强等特点。 Spark Stre…

年终护眼台灯哪个好用?适合学生备考的台灯推荐

最近临近寒假,就有好多家长们和高校学子们催我推荐护眼台灯,人眼对光是非常敏感的,特别是儿童青少年眼睛还在发育的状态来说,光线是至关重要的,于是这次选择的护眼台灯我都是经过亲自使用测试的。 但由于现在护眼台灯…

【Java 进阶篇】Linux 常用命令使用详解:玩转命令行的魔法世界

在计算机的世界里,Linux是一个强大而富有魅力的操作系统。对于很多小白用户来说,刚接触Linux时可能感觉有些陌生,尤其是在命令行界面下。然而,正是这个看似晦涩的命令行,才是Linux系统最为强大和灵活的地方。本文将围绕…

ubuntu桥接方式上网

vmvare:VMware Workstation 17 Pro ubuntu: Ubuntu 14.04.6 LTS window10 下面是我的电脑配置 下面是ubuntu虚拟机的配置 vi /etc/network/interfaces 下面的gateway就是window -ipconfig 截图里的默认网关 auto lo iface lo inet loopbackauto eth0 iface eth0 inet stat…

Vue CLI初识

脚手架Vue CLI 基本介绍 Vue CLI 是Vue官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】 好处 开箱即用,零配置内置babel等工具标准化的webpack配置 使用步骤 全局安装(只需安装一次即可…

APP上线前需要通过哪些测试?如何获取专业的APP测试报告

互联网信息时代,人们最离不开的就是手机,而手机里面吸引我们的也就是APP软件里各式各样好玩的。但一款APP要想在竞争激烈的市场上留存下来,上线前的软件测试就必不可少,那么APP上线前需要通过哪些测试呢?又该如何获取专业的APP测…

Lumerical------创建一个 90 度弯曲波导

Lumerical------创建一个 90 度弯曲波导 引言正文方法1------自定义90度弯曲波导方法2------使用内置集成好的90度弯曲结构引言 90 度弯曲波导在 PIC 中非常常见,如何在 Lumerical 中创建类似的结构呢?这里我们特来说明一下。 正文 方法1------自定义90度弯曲波导 在 Str…

【常用排序算法】快速排序

##快速排序 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法 先从数列中取出一个数作为基准数pivot。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放…

AI绘图模型不会写字的难题解决了

介绍 大家好,最近有个开源项目比较有意思,解决了图像中不支持带有中文的问题。 https://github.com/tyxsspa/AnyText。 为什么不能带有中文? 数据集局限 Stable Diffusion的训练数据集以英文数据为主,没有大量包含其他语言文本的…