设计思路:
【数据权限】是在【功能权限】基础上的进一步扩展。 例如,你可以查看属于【功能权限】范围内的订单,但可以查看哪些订单是【数据权限】的工作。
根据不同的角色定义一些规则并保存规则值。 最后将该值转换为执行脚本中的值。
Mybatis拦截器的作用之一就是拦截某些方法的调用。 你可以选择在这些被拦截的方法执行前后添加一定的逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑游戏动态,而不是执行被拦截的方法。 拦截方法。
Mybatis拦截器设计的初衷之一就是让用户在某些时候可以实现自己的逻辑,而不必接触Mybatis的固有逻辑。
在这个方案中3D场景,可以根据当前用户的数据范围动态组装sql,作为所有查询sql的附加逻辑。
完成:
1.首先寻找机会拦截
2、根据拦截器的注解声明,拦截的是Executor对象的query方法。
3、根据mabatis源码,提取mappedStatement中的SQL语句
4、取出sql语句,根据当前用户获取规则角色权限设计,并将条件追加到sql中
5.将增强后的sql放回到mappedStatement中
拦截器角色权限设计,添加一些权限处理,最后追加到SQL中
获取当前登录信息
这里使用两种方法来获取登录信息:
一种方法是使用 threadlocal 从同一线程传递变量。
另一种方法是直接在dao层传递参数。 我比较懒,没有在线程之前实现变量传递。 当时的情况是,用户提交了一个查询请求,导出后直接提交给另外一个线程springbatch来处理,所以登录者的信息就直接传给了dao参数