多租户模式where条件没有自动添加租户id过滤,join的表后面会自动添加上

Blade 未结 2 326
284123129
284123129 剑圣 2023-10-10 18:16

一、该问题的重现步骤是什么?

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)


image.png

BladeTenantInterceptor.class
/**
* 判断当前操作是否需要进行过滤
*
* @param tableName 表名
*/
public boolean doTenantFilter(String tableName) {
      return AuthUtil.isAdministrator() && !adminTenantTables.contains(tableName);
}



三、你正在使用的是什么产品,什么版本?在什么操作系统上?

  mac系统

2.9.1.RELEASE

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

2条回答
  • 2023-10-11 00:17

    租户插件只会在sql语句的末尾加上tenant_id,不会插入到sql语句中间。而且如果是自定义的sql语句,他也不会生效。他只会对mybatis-plus的api方法自动添加。


    你把你的相关配置都截图贴一下看看,带上重现步骤,要重现了这个问题才好帮忙判断

    0 讨论(0)
  • 2023-10-11 09:50

    image.png


    image.png


    image.png


    没有额外配置什么,就只是配置了开启多租户的字段。看代码join和where都有处理


    image.png



     这一行代码逻辑不对,只有 true && true 时才会返回true。 
     如果是非超管账号进来,永远也不会返回true,导致 list中过滤不到数据




    回答: 2023-10-11 09:52

    截图中我调试代码时注释掉后,就能达到预期效果。但是可能造成其他影响,所以这里或许本身就是代码逻辑上的bug?

    回答: 2023-10-11 09:55

    xml中自定义的sql也会自动增加租户排除,并非只用了mapper或者IService的基础方法

    作者追问:2023-10-11 13:04

    回答: 2023-10-11 14:40

    image.png




    image.png



    新版本的代码我看了,mybatis plus版本已经升级了

    我的基础代码是基于2.9.1.RELEASE版本的,升级基础框架会牵扯很多东西

    新版本是直接调用TenantLineInnerInterceptor中的builderExpression方法,2.9.1是重写了builderExpression方法且加了排除表名的逻辑

    你们可以确认一下,这快重写之前是否存在bug

    作者追问:2023-10-11 14:41

    方便看下git私服最新的3.2.0.RELEASE版本么?如果最新版也有这个问题麻烦再通知我们一下,我们安排处理

    回答: 2023-10-11 17:40

    最新版本的代码,我并没有拉下来去跑,大概看了下代码差别很大了,基本重写了一遍

    2.9.1我是本地调试过的,确认存在这个问题

    回答: 2023-10-11 17:44

    建议如果某些问题在旧版本存在,可以在旧版本上直接修复,而不是直接在新版本中才去修复。

    我们这边实际的情况,底层框架升级是比较困难的,如果存在bug也是考虑直接copy修复后的代码进来


    作者追问:2023-10-11 18:01

    目前有几十个旧版本,我们如果每个问题都去更新每一个旧版,并且发新版的话,是没有这个精力的。我们只能保证修复问题后发布新版更新,还请谅解一下。

    另外这个问题当时隔了4天就修复了,可能你们当时更新的是dev分支,没有关注到master后续的修复

    image.png

    回答: 2023-10-11 18:16

    直接注释掉就好了吗?是不是还有其他地方也改动了。比如blade_top_menu,blade_dict_biz这2张表怎么忽略的呢



    回答: 2023-10-11 18:20

    哦,不好意思看错了。

    你们修复后的代码也是直接加上了!

    那应该没啥问题

    0 讨论(0)
提交回复