MyBatis-Plus
提供的多租户插件,仅支持简单的租户隔离功能。tenant_id
字段,具体可参考系统中的其他业务表。application.yml
配置文件中的多租户相关设置如下:
# 多租户设置
tenant:
# 是否启用多租户功能
enable: true
# 排除租户过滤的表
excludes:
- sys_menu
- sys_tenant
- sys_tenant_package
- sys_role_dept
- sys_role_menu
- sys_user_post
- sys_user_role
- sys_client
- sys_oss_config
⚠️ 注意:若系统已在多租户模式下运行,关闭多租户功能时需要删除 MySQL 和 Redis 中的相关租户数据,重新导入初始 SQL 文件。
通过在 Mapper 接口上使用 @InterceptorIgnore
注解,可跳过租户过滤功能。
@InterceptorIgnore(tenantLine = "true", dataPermission = "false")
⚠️ 注意:此注解默认忽略数据权限,若需要开启数据权限过滤,必须显式设置
dataPermission = "false"
。
在业务代码中使用 TenantHelper
提供的工具类忽略租户过滤。
// 无返回值
TenantHelper.ignore(() -> { /*业务逻辑*/ });
// 有返回值
Class result = TenantHelper.ignore(() -> { return /*业务逻辑*/ });
直接在类或方法上标注 @IgnoreTenant
注解,跳过多租户过滤。
@Component
public class Test {
@IgnoreTenant
public void test() {}
}
在某些业务场景下,例如创建租户时对该租户执行初始化操作,或查询其他租户的数据,可以通过以下方式动态切换租户。
TenantHelper
工具类进行动态切换:// 无返回值
TenantHelper.dynamicTenant(租户id, () -> { /*业务逻辑*/ });
// 有返回值
Class result = TenantHelper.dynamicTenant(租户id, () -> { return /*业务逻辑*/ });
@DynamicTenant
注解:@Component
public class BizTest {
// 动态切换到指定的租户进行操作
@DynamicTenant(value = "#tenantId")
public void test(String tenantId) {
// 业务逻辑
}
}
在登录时,系统会根据账号、手机号或邮箱唯一性来自动识别租户。
如果为租户设置了绑定的域名,登录时只能选择与当前域名关联的租户列表。
在新增租户前,先配置好对应的租户套餐,因为一旦租户创建,无法修改所选套餐。
租户创建完成后,可以同步套餐的变动至租户。
系统默认提供了一个租户,不能修改。
新增租户时需要选择对应的套餐:
租户创建完成后,超级管理员可以登录并管理租户:
租户创建后可以配置绑定的域名,域名绑定后只能用于特定租户登录:
当租户套餐更新后,可以同步套餐中的配置菜单到指定租户。管理员可以通过点击按钮实现同步。
超级管理员可以在系统中切换租户,切换时不会改变当前用户身份,管理员依然具有所有权限,只是切换的数据所属租户不同。
powered by kaifamiao