【RuoYi-Vue-Plus】学习笔记 10 - 数据权限(二)关于权限架构的一些想法

2023-11-02

前言

关于数据权限这块,前面写过的两篇文章已经大致分析过了,这篇文章的目的主要是记录一下对于这一块设计的一些个人的想法。

之所以有这样的想法,主要是因为之前做过的一个项目拥有十分复杂的业务数据权限,通过那个项目我也学习到不少的东西,在学习框架【RuoYi-Vue-Plus】的时候,我也比较了一下两者之间的区别,当然我不敢妄下断言孰优孰劣,所以这里只是作为简单的分享。

数据权限架构分析

RuoYi-Vue-Plus 数据权限架构

(为了便于阅读,去掉了表前缀 “sys_”)
在这里插入图片描述
如图,role_xxx 代表自定义新增数据权限,这个根据项目实际去定义,框架考虑通用性,一般的后台管理系统的权限依照目前的权限架构可以满足使用要求。

在框架中的数据权限虽然在代码层面重写了数据权限的实现,但是表结构还是和若依是一样的,即:用户对应角色,角色对应权限

  • 用户与角色关系为一对多,一个用户可选多个角色。
  • 角色与菜单权限为一对多,一个角色可选多个菜单。
  • 角色与其他数据权限为一对一,例如部门数据权限,角色【部长】对应部门数据权限为【部门及以下】。

在根据数据权限进行查询时,就会根据用户的角色拼接不同的数据权限进行查询。
在这里插入图片描述
在这里插入图片描述
这里只是作为参考,之所以会出现重复是因为,我勾选的角色对应的部门数据权限所关联的部门是父子级别。

可能这里会和我一样有疑问的是,这样拼接重复会不会影响SQL执行的性能?
答案是 不会

我去群里问了一下狮子大佬,得到的答复是:

这种在解析的时候就会优化掉。

后面我去找了一下相关的资料:

《高性能MySQL(第三版)》6.4.3 查询优化处理:这里是引用

由此,这个拼接是可以的。当然就是在控制台看起来不太美观哈哈哈。

XX项目 数据权限架构

(为了便于阅读,去掉了表前缀)
在这里插入图片描述
如图,xxx_auth 代表自定义新增数据权限,这个根据项目实际去定义,之前的项目中数据权限一共有6种(或者说是6个维度),这里就不一一列举了。

这里面最大的不同是 把菜单权限和其他数据权限做了区分,所有的权限对应是用户

  • 用户与角色关系是一对多,一个用户可选多个角色。
  • 角色只对应菜单权限,关系为一对多,主要是左侧菜单以及具体的操作按钮。
  • 用户其他数据权限单独用数据权限作为对应。
  • 用户与数据权限关系一对多,一个用户可以多个数据权限。

当时项目中采用的查询方式也不太一样,但效果和现在一样,是把权限过滤传入 SQL 中,具体代码就不贴出来了。

值得一提的是,有一个不同的地方:

RuoYi-Vue-Plus (V3.5.0) XX项目
使用方式 在每次查询的时候,根据权限类型 DataScopeType 查出来再拼接。 在登录时先查出用户所有相关权限,然后存到缓存中,查询的时候直接从缓存中取出需要用到的数据权限。如果缓存没有,再查询数据库。

这里是我的理解,如果错误的话请大佬们在评论指出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【RuoYi-Vue-Plus】学习笔记 10 - 数据权限(二)关于权限架构的一些想法 的相关文章

  • Amazon Elasticache Redis 集群 - 无法获取端点

    我需要获取 Amazon Elasticache 中 Redis 集群的终端节点 以下代码适用于 Memcached 集群 但不适用于 Redis import com amazonaws auth AWSCredentials impor
  • 如何抑制 Cucumber/Junit 断言堆栈跟踪

    我有一个黄瓜场景 该步骤使用assertEquals 我的结果报告显示了对最终用户不友好的堆栈跟踪 我怎样才能抑制它 Scenario Add two numbers Given I have two inputs 3 and 2 When
  • Java - 红、绿、蓝获取RGB

    通过致电getRGB int x int y with a BufferedImage对象 得到一个负数 如何将三个不同的值 红色 绿色和蓝色 转换为这个单个负数 使用颜色类 new Color r g b getRGB
  • 在此代码中,Runnable 未实例化。为什么?

    Runnable cannot instantiate public class Thread4 public static void main String args Thread t1 new Thread new Runnable R
  • Android CursorAdapter、ListView 和后台线程

    我一直在开发的这个应用程序有包含数兆字节数据的数据库可供筛选 许多活动只是列表视图 通过数据库中的各个级别的数据下降 直到到达 文档 即从数据库中提取并显示在手机上的 HTML 我遇到的问题是 其中一些活动需要能够通过捕获击键并重新运行带有
  • 想要从java中的char数组创建字符流

    我想从 char 数组构造一个流以使用 java 8 功能 例如过滤器和映射 char list a c e Stream
  • javax.persistence.TransactionRequiredException:没有可用于当前线程的实际事务的 EntityManager

    我使用 Hibernate 创建了我的第一个 Spring MVC 项目 我的 DAO 层使用 JPA EntityManager 与数据库交互 GenericDao java Repository public abstract clas
  • Java时间转正常格式

    我有 Java 时间1380822000000 我想转换为我可以阅读的内容 import java util Date object Ws1 val a new Date 1380822000000 toString 导致异常 warnin
  • 生产者程序中的 kafka 网络处理器错误(ArrayIndexOutOfBoundsException:18)

    我有下面的 kafka Producer Api 程序 我对 kafka 本身是新手 下面的代码从 API 之一获取数据并将消息发送到 kafka 主题 package kafka Demo import java util Propert
  • java 中的 Try-with-resources 和 return 语句

    我想知道是否放一个return里面的声明尝试资源block 防止资源自动关闭 try Connection conn return conn createStatement execute 如果我写这样的东西将会联系被关闭 Oracle 文
  • 使用java在网页中进行字符编码

    如何使用java找出网页中的字符编码类型 打开与 URL 的连接 使用URL openConnection http download oracle com javase 6 docs api java net URL html openC
  • Java:不使用 Arrays.sort() 对整数数组进行排序

    这是我们 Java 课程的练习之一中的说明 首先 我想说我 做了我的功课 我不仅仅是懒惰地请 Stack Overflow 上的人帮我回答这个问题 在所有其他练习中 这个特定项目一直是我的问题 因为我一直在努力寻找 完美的算法 编写JAVA
  • 如何构建和使用 TimeSeriesCollections

    我想在图表的 X 轴上显示一些日期 并且here https stackoverflow com questions 5118684 jfreechart histogram with dates据说我必须使用 TimeSeriesColl
  • Hazelcast:连接到远程集群

    我们有一组 Hazelcast 节点 全部运行在一个远程系统 具有许多节点的单个物理系统 上 我们希望从外部客户端连接到该集群 一个 Java 应用程序 它使用如下代码连接到 Hazelcast ClientConfig clientCon
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • Java给定长度的随机数

    我需要在 Java 中生成一个恰好 6 位数字的随机数 我知道我可以在随机发生器上循环 6 次 但是在标准 Java SE 中还有其他方法可以做到这一点吗 要生成 6 位数字 Use Random http download oracle
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • Javac 版本 1.7 无法为目标 1.7 构建

    我试图在 Linux Mint 系统上使用 Sun Java JDK 1 7 0 17 编译 Java 代码 但遇到了这个问题 javac version target 1 7 javac 1 7 0 17 javac invalid ta
  • 检查 Java 字符串实例是否可能包含垃圾邮件数据的最简单方法

    我有一个迭代 String 实例的过程 每次迭代对 String 实例执行很少的操作 最后 String 实例被持久化 现在 我想为每次迭代添加一个检查 String 实例是否可能是垃圾邮件的检查 我只需验证 String 实例不是 成人材
  • Swing:创建可拖动组件...?

    我在网上搜索了可拖动 Swing 组件的示例 但我发现示例不完整或不起作用 我需要的是一个摇摆组件那可以是dragged通过鼠标 在另一个组件内 被拖拽的时候 应该已经 改变它的位置 而不仅仅是 跳 到目的地 我很欣赏无需非标准 API 即

随机推荐

  • 高效的NoSql数据库——Redis

    1 关系型数据库和非关系型数据库 1 1 关系型数据库 sql 操作数据必须要使用sql语句 数据存储在磁盘 存储的数据量大 举例 mysql oracle sqlite 文件数据库 sql server 1 2 非关系型数据库 nosql
  • Java中synchronized的参数怎么传?锁何时会失效?

    1 java中为什么要用锁 简单的一句话 主要为了防止高并发带来的数据不一致的问题 举个例子1 假设数据库中有数据 2022 07 19 01 这个标识 接下来的美生成一条数据 我想基于前面一条数据 1 那么正确的数据是2022 07 19
  • 学习笔记--爬虫(11)---js逆向思路和解密思路(初级)

    目录 js逆向分析思路 js逆向破解思路 模拟重现 在学习js逆向思路之前 我们先来了解参数的几种常见的加密方式 加密 就是通过某种算法将原本的数据内容加密为特殊位数的参数 加密方式 1 Md5加密 通过md5加密会生成一个16位或者32位
  • 数学相关类Math/BigInteger/BigDecimal

    Math 类包含用于执行基本数学运算的方法 如初等指数 对数 平方根和三角函数 记住一点 以后遇到1中的情况 需要用到数学计算 知道这里来找 BigInteger 金融数据 能够表示比long更大的整数 它怎么去装更大的值 它是一个类啊 如
  • C#线程间操作无效:从不是创建控件“textbox1”的线程访问它

    在C 的多线程访问中 在线程间的相互访问时因为线程安全问题有访问限制 在创建一般线程时 对于界面元素访问时这样的问题比较常见 比如 创建一个form1 上面放置一个textbox控件 创建一个线程去访问textbox 界面如下 按钮buut
  • 2023 华为OD机试备考攻略 以及题库目录分值说明 考点说明 (A卷+ B卷)

    文章目录 华为OD在线刷题OJ 华为题库 更新说明 支持的语言 题库目录 2023华为OD统一考试 B卷 100分值 2023华为OD统一考试 B卷 200分值 华为OD统一考试 A卷 题库 100分 华为OD统一考试 A卷 题库 200分
  • 为什么有的人把代码写的如此复杂?

    技术群里有人发了一段代码 附言 兄弟们 这个单例怎么样 我回复 什么鬼 看不懂啊 也有其他小伙伴表示看不懂 看来大家的C 基础和我一样并不全面 我看不懂 主要是因为我没用过TaskCompletionSource和Interlocked的C
  • springboot配置多项目下统一切换不同环境变量profile办法

    springboot配置多项目下统一切换不同环境变量profile办法 springboot 适合于微服务那种多项目开发 每一个小项目就是一个springboot 项目 比如我们这样 问题发生 我们知道springboot 项目中的配置文件
  • 简单的awk基础练习题

    今天闲来没事 做了几道简单的awk基础练习题 跟大家分享一下 文件 file txt的内容格式 文件中包含名字 电话号码和过去三个月里的捐款 具体内容如下 Mike Harrington 510 548 1278 250 100 175 C
  • Ubuntu16下安装使用HBase

    软件与环境 虚拟机 VirtualBox 操作系统 在VirtualBox上安装的 ubuntu 16 04 软件 hbase 1 2 4 jdk1 8 0 161 操作步骤 1 下载 解压缩HBase 打开终端输入 wget mirror
  • 【mmdet环境配置】遇到问题集锦

    1 KeyError RANK 使用os environ keys 命令查看主目录下所有的 key 经过排查 是因为os environ当中没有RANK这个key 解决办法 在原程序中添加一个RANK键值 新增环境变量语句 os envir
  • 基于ROS的AGV运动控制与状态记录(维嵌科技)

    base control监听 首先如果没有base control这个包的话 到github下载 cd home username catkin ws src git clone https github com LFZ1994 base
  • DDD领域驱动设计

    经常可以看到大家讨论DDD 作为一名79岁的 老同志也想分享下自己的心得体会 本篇不会涉及DDD基础概念的介绍 很多文章已经讲解的非常详细 就不赘述了 但想强调一点的是DDD的概念最早由巨佬 Eric Evans 在2003提出 里面的很多
  • 17 需求分析是什么?怎么分析?

    什么是需求分析 需求分析就是一个将用户需求变成产品需求的过程 怎么做需求分析 软件项目的用户需求分析过程不是一成不变的 是迭代进行的 如下所示 收集需求 对用户需求进行进行收集整理 分析需求 对需求进行分析 挖掘用户真实需求 需求评估 筛选
  • 后端i18n国际化多语言处理

    后端利用 i18n 处理多语言 添加配置文件 resource中创建i18n配置文件的文件夹 新建Resource Bundle文件 会出现这个窗口 base name填messages就可以了 然后需要点击右边加号添加语言种类 en US
  • sveltekit配置less

    npm install svelte preprocess d svelte config js import adapter from sveltejs adapter auto import preprocess from svelte
  • C# 中使用结构体

    今天做一个东西需要用到C 的结构体 本来以为可以像VC 里面一样这样写 1 public struct content 2 3 string title 4 string author 5 string contentcontent 6 s
  • @Override must override a superclass method 解决方法

    使用Eclipse开发Java项目时 在 Override 出现以下错误 The method of type must override a superclass method 是因为你的Compiler是jdk5 5不支持 Overri
  • 【hortonworks/registry】registry源码主类该怎么运行

    1 概述 因为需要 想本地调试一下registries 于是需要本地运行 下面是怎么运行主类 主类位置 com hortonworks registries webservice RegistryApplication main publi
  • 【RuoYi-Vue-Plus】学习笔记 10 - 数据权限(二)关于权限架构的一些想法

    文章目录 前言 数据权限架构分析 RuoYi Vue Plus 数据权限架构 XX项目 数据权限架构 前言 关于数据权限这块 前面写过的两篇文章已经大致分析过了 这篇文章的目的主要是记录一下对于这一块设计的一些个人的想法 之所以有这样的想法