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

Blade 未结 2 537
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条回答
  •  admin
    admin (楼主)
    2023-10-11 00:17

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


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

提交回复