2

设计思想:
【数据权限】是在【功能权限】的基础上面进一步的扩展,比如可以查看订单属于【功能权限】的范围,但是可以查看哪些订单就是【数据权限】的工作了。
根据不同的角色定义一些规则,将规则值保存起来。最终将值 转化成执行脚本里面的值。
Mybatis拦截器的一个作用就是可以拦截某些方法的调用,可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法。
Mybatis拦截器设计的一个初衷就是为了供用户在某些时候可以实现自己的逻辑而不必去动Mybatis固有的逻辑。
本方案中即可根据当前用户的数据范围动态的组装成sql作为所有查询sql的附加逻辑。
实现:
1,首先找到拦截时机
2,根据拦截器的注解声明,拦截的是Executor对象query方法
3,根据mabatis源码,取出在mappedStatement的SQL语句
4,取出sql语句,根据当前用户,获取规则,将条件追加到sql中
5,将增强后的sql再放回mappedStatement中

拦截器,加入一些权限处理,最后附加到SQL中
clipboard.png

取到当前登陆人信息
clipboard.png

这里取登陆人信息,用了两种方式:
一种用 threadlocal, 同一个线程把变量传过来
另一种直接在dao层用参数传过来,偷懒了,没有实现线程之前变量传递,当时情况是用户提交一个查询请求,导出直接提交给另一个线程 springbatch去处理,所以就把登陆了人的信息直接传到dao参数上了


大贺
24 声望0 粉丝

大贺718