news 2026/4/16 15:10:28

仿照若依框架进行数据权限控制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
仿照若依框架进行数据权限控制

用的方案其实就是“若依”那套思路,不过自己做了点裁剪,核心就四步——注解标识、AOP 拦截、SQL 拼接、MyBatis 消费。下面按执行顺序捋一遍:

  1. 打标记
    在需要控制权限的 Mapper 方法上贴一个自定义注解@DataScope,里面两个值:

    @DataScope(deptAlias="d",userAlias="u")List<Xxx>selectList(Xxxparam);

    这样一眼就能看出“这个方法要走数据权限”。

  2. AOP 切面
    专门写了一个DataScopeAspect,进入方法之前先跑:

    • 清理 ThreadLocal,防止线程复用串数据;
    • 从 Spring Security 上下文里拿当前登录用户,包括他的角色、部门 ID、用户 ID;
    • 如果是超级管理员,直接放行;否则根据角色提前配置好的“数据范围”枚举拼 SQL 片段,比如“本部门及以下”就用find_in_set(ancestors),“仅本人”就create_by = #{userId}
  3. 把条件塞进实体
    所有实体都继承BaseEntity,里面有个临时字段dataScope。切面通过反射把第 2 步拼好的 SQL 片段塞进去,再往下传。

  4. MyBatis 消费
    XML 里统一加一句:

    <iftest="dataScope != null and dataScope !=''">${dataScope}</if>

    真正发到数据库的 SQL 就带上了权限过滤条件,返回的数据自然就是当前用户能看的那部分。


亮点补充

  • 对业务代码零侵入,只在 Mapper 层加注解,Service 层无感知。
  • SQL 片段统一维护,换需求只改枚举,不动业务。
  • 线程级 ThreadLocal + 用完即清理,没有内存泄漏风险。
  • 后面做 SaaS 多租户时,把“租户 ID”字段也加进来,同一套切面直接复用。

一句话总结
“注解一贴,切面自动把‘部门/个人’范围拼成 SQL,MyBatis 尾巴一接,数据权限就生效,全程业务代码无感,改需求只改配置。”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 15:06:52

AI初创企业融资周报:开源模型、自动化与垂直应用

重要融资亮点 本周&#xff0c;人工智能初创公司筹集了超过41亿美元的资金&#xff0c;在开源人工智能、法律技术和能源基础设施领域出现了里程碑式的事件。从Reflection AI的20亿美元B轮融资&#xff0c;到对工作流自动化和电网现代化的变革性投资&#xff0c;以下是一些亮点&…

作者头像 李华
网站建设 2026/4/13 10:53:49

高效软件测试团队的组织架构设计与演进路径

一、测试团队建设的战略意义与核心目标 在敏捷开发和DevOps理念深入人心的当下&#xff0c;软件测试已从单纯的产品质量把关者转变为业务价值实现的共同构建者。一个设计科学的测试团队架构&#xff0c;不仅能显著提升缺陷检测效率&#xff0c;更能通过质量左移、持续测试等实…

作者头像 李华
网站建设 2026/4/16 13:33:16

19、Apache 服务器配置与相关技术详解

Apache 服务器配置与相关技术详解 一、Apache 基础配置文件与概念 配置文件 httpd.conf :Apache 核心配置文件,整合了原 access.conf 和 srm.conf 的功能,Apache 从该文件中查找其设置。 access.conf :用于控制对文档的访问。 srm.conf :指定可以提供的文档类型…

作者头像 李华
网站建设 2026/4/16 13:30:51

制作电路图时找不到元器件怎么办?

如图我要绘制该元器件&#xff0c;为DC充电器插座&#xff0c;但是在立创EDA搜索发现没有&#xff0c;如图二搜索无果&#xff0c;当然搜索DC插座还是有的这是我们就要利用立创EDA强大的在线库打开立创商城&#xff0c;直接搜索&#xff0c;然后复制该商品编号&#xff0c;回到…

作者头像 李华
网站建设 2026/4/16 13:34:56

Spring AOP概念

Spring AOP是什么&#xff1f;Spring AOP是面向切面编程&#xff0c;他与OOP&#xff08;面向对象编程&#xff09;是相辅相成的。在 OOP 中&#xff0c;以类作为程序的基本单元&#xff0c;而 AOP 中的基本单元是 Aspect&#xff08;切面&#xff09;。在业务处理代码中&#…

作者头像 李华
网站建设 2026/4/16 14:36:28

PaddlePaddle模型训练中的常见问题及解决方案(含CUDA安装错误排查)

PaddlePaddle模型训练中的常见问题及解决方案&#xff08;含CUDA安装错误排查&#xff09; 在深度学习项目开发中&#xff0c;一个看似简单的“环境配置”环节&#xff0c;往往成为压垮工程师耐心的最后一根稻草。你是否曾经历过这样的场景&#xff1a;代码写完、数据准备就绪…

作者头像 李华