目录
一、用户数据权限展示
进入方式:系统管理 -> 角色管理 -> 数据权限
二、数据权限作用及操作
1. 数据权限作用
用户管理:不同用户看到的用户数据有差别
用户admin可以看到:
用户ry可以看到:
角色管理:不同用户看到的角色数据有差别
用户admin可以看到:
用户ry可以看到:
2. 数据权限操作
登录用户admin 进行如下操作:
![](https://img-blog.csdnimg.cn/direct/7492975eb28a429a86e9c7d1e69ba521.png)
![](https://img-blog.csdnimg.cn/direct/e8b674fcfb554b24993bbd76ed8340d6.png)
![](https://img-blog.csdnimg.cn/direct/d670e50e7cdc4706a9947166c6476168.png)
三、数据权限后端源码分析
1.Controller 和Servcie
部门别名和用户别名用在sql语句中
需要跟SQL 语句给部门和用户表名的别名保持一致
2.Java Mapper 和xml Mapper
若依在进行数据权限的访问时,Mapper层中对数据进行处理,根据用户角色的权限对数据进行过滤。
${params.dataScope}的作用就是对数据范围进行过滤。
3.相关代码
AOP 类DataScopeAspect处理注解@DataScope:
函数调用链:doBefore -> handleDataScope -> dataScopeFilter 添加SQL 语句
四、总结
最终添加的sql语句及作用:
全部权限:空字符串。用户具有全部数据的访问权限。
自定义权限:OR d.dept_id IN (SELECT dept_id FROM sys_role_dept WHERE role_id = X) 。
根据用户的角色,查询出与该角色相关的部门数据,仅允许用户访问与这些部门相关的数据。
本部门及以下权限:OR d.dept_id IN (SELECT dept_id FROM sys_dept WHERE dept_id = X or find_in_set(X, ancestors)) 。允许用户访问自己所在部门及其所有子部门的数据。
仅本人权限:OR u.user_id = X 。限制用户只能访问自己的数据。