以RuYi为例介绍Spring AOP(面向切面编程)

目录

一:数据权限展示

二、数据权限作用及操作 

三、数据权限后端源码分析 

3.1 controller层:

3.2 Service层: 

3.3 Mapper层: 

3.4 确定接口和相关代码:

四、总结 


Ruoyi是一个基于Spring Boot和Vue.js的开源后台管理系统,内置了强大的权限管理系统,而Spring AOP则是Spring框架的一个核心特性,用于处理横切关注点,如权限控制。

一:数据权限展示

首先拉起ruoyi打开系统管理 -> 角色管理 -> 数据权限

我们可以通过分配角色,对数据权限进行控制。 

二、数据权限作用及操作 

  1. 保障数据安全: 通过数据权限控制,系统可以确保用户只能访问其被授权的数据,防止未经授权的用户获取敏感信息。

  2. 隔离数据: 数据权限可以用来隔离不同用户、不同部门或角色之间的数据,确保数据的完整性和保密性。

  3. 合规性: 对于一些需要符合法规和合规性要求的系统,数据权限可以帮助系统管理员确保数据的合法使用。

例如:在用户管理中,用户admin可以看到的数据如下 

而用户ry能看到的数据为

用户admin 的角色为超级管理员,超级管理员设置为具有访问全部数据权限

用户ry 的角色为普通角色,普通角色设置为只有访问本部门数据权限,其所属部门为测试部门 

 数据权限操作-权限控制类型

三、数据权限后端源码分析 

3.1 controller层:

controller层比较简单就是通过处理"/list"路径的GET请求,在权限验证通过后,通过userService查询用户列表,并将查询结果封装成一个分页信息对象返回给前端。

3.2 Service层: 

3.3 Mapper层: 

Java Mapper

xml Mapper

若依在进行数据权限的访问时,Mapper层中对数据进行处理,根据用户角色的权限对数据进行过滤。可以看到倒数第二行${params.dataScope}就是对数据范围进行过滤。

那么这个时候我们就要思考${params.dataScope}是在做什么,为什么可以进行数据过滤?

3.4 确定接口和相关代码:

函数调用链:doBefore -> handleDataScope -> dataScopeFilter 添加SQL 语句

接下来我们可以引出我们最后的主角了——AOP 类DataScopeAspect 处理注解@DataScope 

 

根据当前登录用户的信息,判断是否为超级管理员,如果不是,则调用dataScopeFilter方法进行数据权限过滤。这种机制通常用于确保只有非管理员用户才会受到数据权限的约束,管理员用户可以访问所有数据。 

接下来我们分析一下AOP 类DataScopeAspect 对于全部权限、自定义权限、本部门及以下权限、仅本人权限最终添加的SQL 语句及作用

  1. 全部权限(DATA_SCOPE_ALL):

    • SQL语句:""(空字符串)
    • 作用:表示用户具有全部数据的访问权限,不需要添加任何过滤条件,即不进行数据权限的过滤。
  2. 自定义权限(DATA_SCOPE_CUSTOM):

    • SQL语句:动态生成类似 OR d.dept_id IN (SELECT dept_id FROM sys_role_dept WHERE role_id = X) 的条件,X为角色ID。
    • 作用:根据用户的角色,查询出与该角色相关的部门数据,仅允许用户访问与这些部门相关的数据。
  3. 本部门权限(DATA_SCOPE_DEPT):

    • SQL语句:动态生成类似 OR d.dept_id = X 的条件,X为用户所属部门ID。
    • 作用:限制用户只能访问自己所在部门的数据,不包括子部门的数据。
  4. 本部门及以下权限(DATA_SCOPE_DEPT_AND_CHILD):

    • SQL语句:动态生成类似 OR d.dept_id IN (SELECT dept_id FROM sys_dept WHERE dept_id = X or find_in_set(X, ancestors)) 的条件,X为用户所属部门ID。
    • 作用:允许用户访问自己所在部门及其所有子部门的数据。
  5. 仅本人权限(DATA_SCOPE_SELF):

    • SQL语句:动态生成类似 OR u.user_id = X 的条件,X为用户ID。
    • 作用:限制用户只能访问自己的数据。

这些SQL语句会在实际查询数据库之前动态地加入到原始的SQL查询语句中,从而确保用户在执行查询操作时受到相应的数据权限约束。此切面在目标方法执行前会拦截,检查用户的角色和数据权限配置,然后根据不同的权限类型生成相应的SQL条件。

四、总结 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值