Skip to content
快捷导航

多组户配置

admin超级用户可以登录任何租户的管理平台,admin登录选择对应租户添加管理账号。

需要配置多租户功能表新增tenant_id字段

SQL
CREATE TABLE `jw_crm_article` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(250) DEFAULT '' COMMENT '标题',
  `content` varchar(1000) DEFAULT '' COMMENT '文章内容',
  `public_time` datetime DEFAULT NULL COMMENT '发布时间',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  `delete_status` varchar(1) DEFAULT '1' COMMENT '是否有效  1.有效  2无效',
  `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='文章表';

租户处理器 -主要实现mybatis-plus,过滤不需要增加租户id表,在MyTenantHandler配置

java
/**
  * 根据表名判断是否进行过滤
  * 忽略掉一些表:如租户表(sys_tenant)本身不需要执行这样的处理
  *
  * @param tableName
  * @return
  */
@Override
public boolean doTableFilter(String tableName) {
  IGNORE_TENANT_TABLES.add("jw_sys_area");
  IGNORE_TENANT_TABLES.add("jw_sys_config");
  IGNORE_TENANT_TABLES.add("jw_sys_dict_data");
  IGNORE_TENANT_TABLES.add("jw_sys_notice_receive");
  IGNORE_TENANT_TABLES.add("jw_sys_permission");
  IGNORE_TENANT_TABLES.add("jw_sys_region");
  IGNORE_TENANT_TABLES.add("jw_sys_role");
  IGNORE_TENANT_TABLES.add("jw_sys_role_permission");
  IGNORE_TENANT_TABLES.add("jw_sys_user_role");
  IGNORE_TENANT_TABLES.add("jw_sys_tenant");
  return IGNORE_TENANT_TABLES.stream().anyMatch((e) -> e.equalsIgnoreCase(tableName));
}
    

过滤一些查询sql不用拼接租户id(tenant_id),MySqlParserFilter类配置

java
public boolean doFilter(MetaObject metaObject) {
  MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
  // 过滤自定义查询此时无租户信息约束出现
  if (
  "com.jw.admin.dao.SysUserMapper.selectByPrimaryKey".equals(ms.getId())
  ||"com.jw.admin.dao.SysUserMapper.deleteByPrimaryKey".equals(ms.getId())
  ||"com.jw.admin.dao.UserDao.getUserName".equals(ms.getId())
  ) {
    return true;
  }
  return false;
}