数据权限就该这么实现(设计篇)_java数据权限实现方案_Java技术攻略的博客-CSDN博客
添加数据规则表和数据规则组表,role表中再加上数据规则组ids的字符串字段,多个数据规则组用逗号隔开,编写代码时,在mapper层上加自定义的权限注解,标识需要对sql进行数据权限处理,即添加数据规则,注解中加上一个属性,表示你这个mapper的sql语句需要用哪个规则组来改造sql语句。(废弃)
通用版:使用注解,AOP中截取注解,并将权限sql放在threadlocal中,mybatis拦截器中再去具体实现权限sql,从而放到对应的业务sql中使用
优点:简单,当部门的层级结构不是很多的时候用他比较合适
缺点:当层级机构很多时,这种方式是要获取当前层级及其底下的所有的部门id的,所以如果层级很多,那么最终业务sql中的in (xx,xxx)数据就会很多
进阶版:和通用版差不多,首先将用户的层级结构缓存起来/xxx/xxx/xxx,然后将此层级缓存到threadlocal中,threadlocal中应该是{alias}.{fieldName} like concat ('/xxx/xxx/xxx', '%')
在mybatis拦截器中再根据注解将{alias}.{fieldName}换成具体的值。
优点:数据量比较大时也不用害怕sql文本会比较大
缺点:对应的业务表需要要对应的字段来表示哪一层(xx/xx)的权限可以查看当前这条数据。
es简单数据权限处理:
https://blog.csdn.net/u011487470/article/details/125275455