Wujies 无界平台
后端框架 · RuoYi-Vue-Plus框架功能基础功能

多租户功能


版本 >= 5.X

适用边界与常见误区

在使用多租户前,请先明确系统定位。多租户适用于一套系统服务多家独立企业的场景,租户之间数据必须完全隔离。

常见误区:

  • 平台内的多商户、本部/分部、大租户/小租户、上下级租户等,不是多租户问题
  • 这类场景通常应使用数据权限与业务逻辑来解决

输入图片说明

总结:SaaS 本质是“卖软件的”,客户之间应互不关联。请确认适用后再启用。

前置说明(重要)

  1. 本框架多租户功能的实现是基于 MyBatis-Plus 多租户插件 的,只支持最简单的隔离。
  2. 本系统默认开启多租户功能。
  3. 多租户业务表建表需要加上租户id tenant_id,可参考其他系统表。
  4. 非多租户表可在配置文件进行配置排除。
  5. 只有超级管理员支持切换租户。

多租户使用流程(先说结论再展开!)

  1. 开启多租户配置(系统默认已开启)
  2. 登录界面(可选择不同租户)

注:如果为租户设置了绑定域名,则只能选择当前域名相关的租户列表。

  1. 设置多租户套餐
  2. 新增/修改租户(需要选择套餐)
  3. 切换租户(仅超级管理员可操作)

多租户配置

application.yml

开关 enable:控制多租户总开关。
excludes:不需要租户隔离的表可在此配置排除。

注意: 如果已经基于租户模式启动了程序 关闭租户必须删除mysql与redis内的相关数据重新导入sql

输入图片说明

忽略租户

1.如果需要指定单独 SQL 不开启过滤,可在对应的 Mapper 接口添加如下忽略注解:

@InterceptorIgnore(tenantLine = "true", dataPermission = "false")

此处注意事项 使用此注解如果需要开启数据权限 dataPermission = "false" 必须添加 mp的注解默认是忽略数据权限的 会导致数据权限失效

2.如果需要在业务层忽略多租户,可调用以下方法(推荐使用):

# 无返回值
TenantHelper.ignore(() -> { 业务代码 });
# 有返回值
Class result = TenantHelper.ignore(() -> { return 业务代码 });

动态切换租户

仅适用于特殊需求业务(例如: 创建租户时, 对该租户操作一些数据, 或者需要去其他租户查一些数据等) 禁止乱用后果自负

# 无返回值
TenantHelper.dynamic(租户id, () -> { 业务代码 });
# 有返回值
Class result = TenantHelper.dynamic(租户id, () -> { return 业务代码 });

登录界面

输入图片说明

注:如果为租户设置了绑定域名,则只能选择当前域名相关的租户列表。

租户套餐管理

租户套餐新增

输入图片说明

输入图片说明

注: 1、先新增套餐再新增租户,因为租户新增之后无法修改所选套餐。 2、租户所关联的套餐如果后续有修改可以进行同步。

租户管理

默认租户

注:默认租户无法修改

输入图片说明

新增租户

填写表单

输入图片说明

选择新增的租户套餐

输入图片说明

新增完成

输入图片说明

登录租户

输入图片说明

输入图片说明

修改租户

配置域名

输入图片说明

输入图片说明

没有配置域名

输入图片说明

强调一下:这不是bug!

注:域名的配置就是为了绑定特定租户!

同步套餐

应用场景:租户套餐进行了修改,配置的菜单需要同步到特定租户。 (不是所有租户都有更新套餐的权利, 这是跟钱挂钩的)

点一下按钮的事,图略。

补充说明: 1、这里的“同步套餐”本质上是把当前套餐关联的菜单权限重新同步到目标租户。 2、主要影响的是租户管理员及其角色可分配的菜单范围,不是重置租户业务数据。 3、如果你后续还调整了默认租户下的字典、参数等基础配置,通常还需要配合同步字典/参数这类能力一起处理。

切换租户(仅超级管理员)

注:管理员切换租户不是切换用户,切换的只是数据,管理员拥有所有权限。

输入图片说明

输入图片说明

输入图片说明

目录