当前位置: 首页 > news >正文

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

用的方案其实就是“若依”那套思路,不过自己做了点裁剪,核心就四步——注解标识、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 尾巴一接,数据权限就生效,全程业务代码无感,改需求只改配置。”

http://www.rkmt.cn/news/110726.html

相关文章:

  • window 下安装和配置 jdk1.8环境
  • 2025球轴承实力制造商TOP5权威推荐:甄选高品质厂家,助 - 工业推荐榜
  • python实现密码暴力破解
  • LobeChat能否集成GitHub?代码协作更高效
  • 2025高空特种工程服务商TOP5权威推荐:盈尚环境工程(杭 - myqiye
  • LobeChat能否生成KPI指标?绩效考核智能化
  • 记一次大屏某一处图像采集接口异常导致该页其他图表都无法显示问题解决
  • LobeChat能否支持梦境解析?睡眠记录与心理象征意义探讨
  • Linly-Talker开源教程:打造会说话的AI虚拟人
  • Flutter:在流动的 UI 中,重新理解“界面”的意义
  • vue基于Spring Boot的高校教师考勤科研培训管理系统设计与实现
  • 关于Windows 11 家庭中文版 25H2中ensp无法启动路由器,报40错的解决方法
  • vue基于Springboot框架大学生竞赛辅导管理系统设计与实现_979lg660
  • 基于Dify部署多语言GPT-SoVITS合成系统的架构设计
  • 开源不输商用!LobeChat媲美ChatGPT的用户体验实测
  • PC板生产厂家推荐榜:29年经验 + 70多品种全覆盖(厂家直销) - 品牌排行榜
  • vue基于Springboot框架的宠物之家领养寄养救助商城管理系统h1ypq0zm
  • 12月12号
  • vue基于Springboot框架大学生家教平台_85m5z064 没论文
  • AI元人文构想:人机协作的“未来哪吒”架构
  • LobeChat能否取代官方ChatGPT客户端?对比评测来了
  • 机柜空调哪家好:上海5家实力厂商深度对比(附选型参数) - 品牌排行榜
  • vue基于spring boot的学生宿舍分配报修管理系统
  • 流量监控前端不显示问题
  • 利用Proxifier、Burp Suite和亮数据高效抓包
  • C语言:枚举体
  • 【LLM基础教程】语言模型基础
  • YOLO-v5论文的10个核心创新点解析
  • 【LLM基础教程】统计语言模型N-gram
  • Nigx配置