文章目录
1. 如何实现数据权限(内核)
1.1 原理
面对复杂多变的需求,硬编码的可复用性差,需要非常大的开发和维护成本。
1.2 源码实现,mybatis如何重写sql
1.2.1 重写sql
方案二,本质上也是基于mybatis的插件机制。
1.2.2 解析sql
1.2.3 DataPermissionDatabaseInterceptor
1.3 源码实现:如何基于(数据规则)生成 WHERE 条件?
2.如何实现【部门级别】的数据权限
2.1 入门使用
2.2 源码实现:基于部门级别的数据规则?
2.3 分析源码和debug源码过程
-
配置
设置测试账号test的数据权限为:仅本部门。登陆之后,调用查询用户列表接口。 -
直接在MybatisPlusInterceptor的intercept方法打断点。
注意boundSql的where条件,没有dept_id。
-
进入beforeQuery方法
没有配置,默认开启,返回全部rules。
-
传递rules
-
进入parserSingle方法,进入processParser方法
-
进入关键方法processPlainSelect方法
-
进入builderExpresssion方法
-
进入buildDeptExpression
-
返回builderExpression方法