汽车电子核心:MPC5646C双核MCU架构、低功耗与通信矩阵设计实战
2026/6/22 20:07:18
用的方案其实就是“若依”那套思路,不过自己做了点裁剪,核心就四步——注解标识、AOP 拦截、SQL 拼接、MyBatis 消费。下面按执行顺序捋一遍:
打标记
在需要控制权限的 Mapper 方法上贴一个自定义注解@DataScope,里面两个值:
@DataScope(deptAlias="d",userAlias="u")List<Xxx>selectList(Xxxparam);这样一眼就能看出“这个方法要走数据权限”。
AOP 切面
专门写了一个DataScopeAspect,进入方法之前先跑:
find_in_set(ancestors),“仅本人”就create_by = #{userId}。把条件塞进实体
所有实体都继承BaseEntity,里面有个临时字段dataScope。切面通过反射把第 2 步拼好的 SQL 片段塞进去,再往下传。
MyBatis 消费
XML 里统一加一句:
<iftest="dataScope != null and dataScope !=''">${dataScope}</if>真正发到数据库的 SQL 就带上了权限过滤条件,返回的数据自然就是当前用户能看的那部分。
亮点补充
一句话总结
“注解一贴,切面自动把‘部门/个人’范围拼成 SQL,MyBatis 尾巴一接,数据权限就生效,全程业务代码无感,改需求只改配置。”