一、该问题的重现步骤是什么?
1. bladex开启多租户功能后,sql语句的where条件中并没有加上租户id过滤,join的表 会自动添加 租户id过滤
举例sql:
select a.* from a
left join b on b.id=a.id and and b.tenant_id = '000000'
where 1=1
// join的表 后面自动加上 tenant_id = '000000' 了,但是where 后面tenant_id = '000000' 不会自动加上
二、你期待的结果是什么?实际看到的又是什么?
期望where语句后面自动加上租户id,自己通过源码调试doTenantFilter方法返回false导致过滤不到表名 (使用的非超级管理员的token)
BladeTenantInterceptor.class/**
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
mac系统
2.9.1.RELEASE
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
租户插件只会在sql语句的末尾加上tenant_id,不会插入到sql语句中间。而且如果是自定义的sql语句,他也不会生效。他只会对mybatis-plus的api方法自动添加。
你把你的相关配置都截图贴一下看看,带上重现步骤,要重现了这个问题才好帮忙判断
没有额外配置什么,就只是配置了开启多租户的字段。看代码join和where都有处理
这一行代码逻辑不对,只有 true && true 时才会返回true。
如果是非超管账号进来,永远也不会返回true,导致 list中过滤不到数据
截图中我调试代码时注释掉后,就能达到预期效果。但是可能造成其他影响,所以这里或许本身就是代码逻辑上的bug?
xml中自定义的sql也会自动增加租户排除,并非只用了mapper或者IService的基础方法
新版本的代码我看了,mybatis plus版本已经升级了
我的基础代码是基于2.9.1.RELEASE版本的,升级基础框架会牵扯很多东西
新版本是直接调用TenantLineInnerInterceptor中的builderExpression方法,2.9.1是重写了builderExpression方法且加了排除表名的逻辑
你们可以确认一下,这快重写之前是否存在bug
方便看下git私服最新的3.2.0.RELEASE版本么?如果最新版也有这个问题麻烦再通知我们一下,我们安排处理
最新版本的代码,我并没有拉下来去跑,大概看了下代码差别很大了,基本重写了一遍
2.9.1我是本地调试过的,确认存在这个问题
建议如果某些问题在旧版本存在,可以在旧版本上直接修复,而不是直接在新版本中才去修复。
我们这边实际的情况,底层框架升级是比较困难的,如果存在bug也是考虑直接copy修复后的代码进来
目前有几十个旧版本,我们如果每个问题都去更新每一个旧版,并且发新版的话,是没有这个精力的。我们只能保证修复问题后发布新版更新,还请谅解一下。
另外这个问题当时隔了4天就修复了,可能你们当时更新的是dev分支,没有关注到master后续的修复
直接注释掉就好了吗?是不是还有其他地方也改动了。比如blade_top_menu,blade_dict_biz这2张表怎么忽略的呢
哦,不好意思看错了。
你们修复后的代码也是直接加上了!
那应该没啥问题
扫一扫访问 Blade技术社区 移动端