设计的mybatis数据权限拦截器,根据不同数据源#不同表的字段有相关的预设的数据权限值或者取值范围,但sql中多表有别称或者嵌套sql语句内,没有where条件的情况可能需要去添加where
举个例子:
select * from table_a t_a where id in (select id from table_b)
假如table_b当前用户有一定的权限#比如 i d>8 and id<12,t_a.name='张三' or t_a.name='王五'
我希望能够拼接成如下格式:
select * from table_a t_a where id in (select id from table_b where i d>8 and id<12 ) where t_a.name='张三' or t_a.name='王五'
1、如果表存在别名,首先正则表达式"(t_a\.\w+\=)"匹配第一个别名赋值语句位置,因为赋值条件成立,所以可以在之前添加拼接条件,可以解决join或者带where的相关拼接问题.
2、如果不匹配的话,可能如下部分可能性:
[1]、可能没有相关where,但sql语法支持,如何匹配到添加where的位置?
[2]、内部嵌套,如何识别并在合适的位置添加where,另外添加where 后面是否有group by|limit|having|order by
例子如下:
select * from table_a t_a where id in (select id from table_b) limit 0,10
欢迎大家来一起讨论#目前在做的时候遇到了如何找到需要添加where的位置的问题#希望大家能够奉献下宝贵的意见###谢谢@!!!