设置实体继承多租户的 DO

This commit is contained in:
YunaiV
2021-12-07 13:31:59 +08:00
parent 8795a4cdeb
commit 4b95146c98
16 changed files with 116 additions and 26 deletions

View File

@ -3,6 +3,8 @@ package cn.iocoder.yudao.framework.tenant.core.db;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.tenant.config.TenantProperties;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import lombok.AllArgsConstructor;
import net.sf.jsqlparser.expression.Expression;
@ -25,6 +27,11 @@ public class TenantDatabaseInterceptor implements TenantLineHandler {
@Override
public boolean ignoreTable(String tableName) {
// 如果实体类继承 TenantBaseDO 类,则是多租户表,不进行忽略
TableInfo tableInfo = TableInfoHelper.getTableInfo(tableName);
if (tableInfo != null && TenantBaseDO.class.isAssignableFrom(tableInfo.getEntityType())) {
return false;
}
// 不包含,说明要过滤
return !CollUtil.contains(properties.getTables(), tableName);
}

View File

@ -14,9 +14,6 @@ import java.io.IOException;
* 多租户 Context Web 过滤器
* 将请求 Header 中的 tenant-id 解析出来,添加到 {@link TenantContextHolder} 中,这样后续的 DB 等操作,可以获得到租户编号。
*
* Q会不会存在模拟 tenant-id 导致跨租户的问题?
* A用户登陆后获得的 Token 是基于租户级别隔离,从而保证授权失败。
*
* @author 芋道源码
*/
public class TenantContextWebFilter extends OncePerRequestFilter {