5.数据权限

news2024/9/21 18:57:34

根据配置的权限字段,自动拼接sql,例如想要做部门的数据权限,每张表保存dep_id,然后查询的时候拼接 where dep_id=?,这样就实现了数据隔离。

1.示例

例如部门列表查询
角色管理授予本部门权限,然后给用户分配这个角色
在这里插入图片描述
查询部门分页时,会进到这个拦截器,调用重写的beforeQuery方法。
在这里插入图片描述
在这里插入图片描述
然后调用JsqlParserSupport类的parserSingle方法
在这里插入图片描述
然后调用processParser方法
在这里插入图片描述
然后调用DataPermissionDatabaseInterceptor类的processSelect方法
在这里插入图片描述
然后调用processSelectBody方法
在这里插入图片描述
然后调用processPlainSelect方法,builderExpression会拼接权限sql,然后调用setWhere方法,设置完整的sql
在这里插入图片描述
builderExpression方法
在这里插入图片描述
buildDataPermissionExpression方法
在这里插入图片描述
然后调用DeptDataPermissionRule类的getExpression方法,这个是自己写的规则类,实现DataPermissionRule接口,这个方法会获取当前用户的权限,然后进行sql生成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里获取权限拿到sql之后,返回到上面的buildDataPermissionExpression方法
在这里插入图片描述
然后继续回到builderExpression方法
在这里插入图片描述

回到processPlainSelect方法
在这里插入图片描述
相当于重新给where赋值
在这里插入图片描述
在这里插入图片描述

2.规则生效流程

1.项目启动时,先注入自己的规则类

在这里插入图片描述

2.DataPermissionConfiguration配置类

这里是调用DeptDataPermissionRuleCustomizer接口的customize方法,传入部门规则类,用lambda表达式方式调用,传入部门规则(rule),调用部门规则类的方法。
部门权限给部门表添加的规则是 id这个字段 用户表添加的是dep_id这个字段
用户权限给用户表加的是id这个字段
在这里插入图片描述
如果还有别的权限控制,就可以自己定义规则,然后创建xxxxDataPermissionAutoConfiguration自动配置类,注入自己的规则,创建xxxPermissionConfiguration,指定哪张表的哪个字段。
这样自己写的rule就被加载了,在YudaoDeptDataPermissionAutoConfiguration自动配置类中注入的,自定义的规则也有了,在DataPermissionConfiguration配置类中。

3.注入DataPermissionRuleFactory

在YudaoDataPermissionAutoConfiguration自动配置类中,传入所有的规则
在这里插入图片描述
DataPermissionRuleFactory的功能就是获取所有的规则,在拦截器的拦截方法中调用
在这里插入图片描述

4.DataPermissionDatabaseInterceptor

将DataPermissionDatabaseInterceptor加入到mybatisPlus的拦截器中,通过这个拦截器进行sql拼接。
在这里插入图片描述

5.对请求进行拦截

6.总结

yudao-spring-boot-starter-biz-data-permission 模块
在这里插入图片描述
yudao-module-system模块
在这里插入图片描述

3.DataPermission注解生效流程

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

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

相关文章

一文搞懂java集合框架

一文搞懂java集合框架 目录 一文搞懂java集合框架什么是集合?有什么特点?框架图Collection基本介绍:接口常用方法使用代码示例 List基本介绍常用方法使用代码示例ArrayList注意事项和细节 Vector注意事项和细节 ArrayList和Vector如何创建与使…

Ddocker cgroups资源限制

目录 一、概述 1、简介 2、cgroups四大功能 3、cpu时间片概念 二、查看容器的默认CPU使用限制 1、进行CPU压力测试 三、创建容器时设置CPU使用时间限制 四、设置CPU资源占用比(设置多个容器时才有效 1、分别进入容器进行压测 查看容器运行状态 五、设置容器…

音视频八股文(4)--ffmpeg常见命令(3)

17 FFmpeg滤镜 17.1 filter的分类 按照处理数据的类型,通常多媒体的filter分为: ● 音频filter ● 视频filter ● 字幕filter 另一种按照处于编解码器的位置划分: ● prefilters: used before encoding ● intrafilters: used while encod…

ML之DR:sklearn.manifold(流形学习和降维的算法模块)的简介、部分源码解读、案例应用之详细攻略

ML之DR:sklearn.manifold(流形学习和降维的算法模块)的简介、部分源码解读、案例应用之详细攻略 目录 sklearn.manifold的简介 sklearn.manifold(流形学习和降维的算法模块)的概述 外文翻译 sklearn.manifold的部分源码解读 sklearn.manifold的简介 sklearn.ma…

常用数据加密

一、加密和解密 1、 加密 数据加密的基本过程,就是对原来为明 的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为 “密文”。通过这样的途径,来达到保护数据不被 非法人窃取、阅读的目的。 2、解密 加密的逆…

VUE规范及常见问题

规范: props需要写明数据类型并加上注释 多用computed属性,少用变量赋值和watch 只要一个值能用另一个或几个值计算出来,我们都用computed,这样可以减少代码量并避免因为忘记修改值而导致bug路由(pages里边的组件)用小写和-命名…

人机交互有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是几个人机交互领域的SCI期刊推荐: ACM Transactions on Computer-Human Interaction (ACM TOCHI): 由ACM(Association for Computing Machinery)出版的人机交互领域的顶级期刊之一,发表关于计算机和人之间相互作…

python通过setuptools打包与分发

目录 一:setup.py文件的书写 二:setup.py 各个打包命令的使用:所需要用到的只有4个命令build / install / sdist / bdist 1:build: python setup.py build 2:install: python setup.py install 3: sdist &#xf…

Android Apk加固原理解析

前言 为什么要加固 对APP进行加固,可以有效防止移动应用被破解、盗版、二次打包、注入、反编译等,保障程序的安全性、稳定性。 常见的加固方案有很多,本文主要介绍如果通过对dex文件进行加密来达到apk加固的目的; APK加固整体…

【计算机视觉 | 目标检测】OVD:Open-Vocabulary Object Detection 论文工作总结(共八篇)

文章目录 一、2D open-vocabulary object detection的发展和研究现状二、基于大规模外部图像数据集2.1 OVR-CNN:Open-Vocabulary Object Detection Using Captions,CVPR 20212.2 Open Vocabulary Object Detection with Pseudo Bounding-Box Labels&…

Springboot创建项目bug

问题 今天创建maven项目,由于和教程不太一样,结果报错了 核心报错如下 Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.context.logging.LoggingApplicationListener 梳理 我的idea创建…

系统集成项目管理工程师 笔记(第六章:项目整体管理)

文章目录 项目整体管理6个过程制定项目章程过程 6.3 制订项目管理计划 2476.4 指导与管理项目工作 2516.5 监控项目工作 255监控项目工作的输入监控项目工作的工具与技术监控项目工作的输出 6.6 实施整体变更控制6.7结束项目或阶段 6.1 项目整体管理概述 242 6.1.1 项目整体管理…

【过程8】——能量守恒视角总结感受

一、背景 另一个角度的看到,观望着过程中自己曾经类似的经历(小舅子的工作)。 时间久了,经历多了,感悟会更加的充实;最近自己对于人在维持能量的过程中也有很多的感悟,一并做一下总结 二、过程 1.人为什么天性不愿意…

npm和yarn的相同点和不同点

官网 npmhttps://www.npmjs.com Home | Yarn - Package ManagerFast, reliable, and secure dependency management.https://yarnpkg.com Fast, disk space efficient package manager | pnpmFast, disk space efficient package managerhttps://pnpm.io 使用场景 npm&#x…

数据库系统概论--第五章课后习题

1.什么是数据库的完整性? 答:数据库的完整性是指数据的正确性和相容性。 2. 数据库的完整性概念与数据库的安全性概念有什么区别和联系? 答: 数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存…

将本地Python项目打包成docker镜像,上传到服务器,在docker中运行

文章目录 Docker环境创建虚拟环境pycharm使用虚拟环境准备打包保存为镜像文件加载镜像文件 参考文献 Docker环境 windows11Docker下载地址:https://docs.docker.com/desktop/install/windows-install/ 创建虚拟环境 虚拟环境可以搭建独立的Python运行环境&#x…

ORACLE_OCM.MGMT_CONFIG_JOB_2_2

今天巡检一套AIX上11g rac,发现有个报错 Errors in file /opt/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_j000_16777270.trc: ORA-12012: error on auto execute of job "ORACLE_OCM"."MGMT_CONFIG_JOB_2_2" ORA-29280: invalid director…

〖Python网络爬虫实战⑱〗- 数据存储之TXT纯文本

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

WebSocket+Vue+SpringBoot实现语音通话

参考文章 整体思路 前端点击开始对话按钮后,将监听麦克风,获取到当前的音频,将其装化为二进制数据,通过websocket发送到webscoket服务端,服务端在接收后,将消息写入给指定客户端,客户端拿到发送…

Automa自动化爬取文本(一)

目录 介绍 下载地址 安装教程 爬取百度热搜 介绍 Automa 是一个免费、开源的 Chrome 扩展,它通过目前流行的 No Code 无代码方式,只需要拖拽模块就实现了浏览器自动化,比如自动填写表格、执行重复性任务。 在工作中,如果我们…