# 多租户功能
- - -
## 版本 >= 5.X

## 前置说明（重要）
1. 本框架多租户功能的实现是基于 [MyBatis-Plus 多租户插件](https://baomidou.com/pages/aef2f2/#tenantlineinnerinterceptor) 的，只支持最简单的隔离。
2. 本系统默认开启多租户功能。
3. 多租户业务表建表需要加上租户id `tenant_id`，可参考其他系统表。
4. 非多租户表可在配置文件进行配置排除。
5. 只有超级管理员支持切换租户。

## 多租户使用流程（先说结论再展开！）
0. 开启多租户配置（系统默认已经开启）
1. 登录界面（可以选择不同租户）
> 注：如果为租户设置了绑定域名，则只能选择当前域名相关的租户列表。
2. 设置多租户套餐
3. 新增/修改租户（需要选择套餐）
4. 切换租户（仅超级管理员可操作）

## 多租户配置
`application.yml`<br>

> 开关 `enable` 节点不用废话。 <br>
> 如果不需要过滤租户的表可在 `excludes` 节点下添加。

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

![输入图片说明](https://foruda.gitee.com/images/1680168468127690787/2cd3279e_4959041.png "屏幕截图")

## 忽略租户

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 业务代码 });
```

## 登录界面

![输入图片说明](https://foruda.gitee.com/images/1680173982933030545/bca146d7_4959041.png "屏幕截图")

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

## 租户套餐管理
### 租户套餐新增
![输入图片说明](https://foruda.gitee.com/images/1680174317475230288/352957a1_4959041.png "屏幕截图")

![输入图片说明](https://foruda.gitee.com/images/1680174602877523112/fc194f17_4959041.png "屏幕截图")

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


## 租户管理
### 默认租户
> 注：默认租户无法修改

![输入图片说明](https://foruda.gitee.com/images/1680174738913576400/b6aca11a_4959041.png "屏幕截图")

### 新增租户
#### 填写表单
![输入图片说明](https://foruda.gitee.com/images/1680174945220618443/f7181b51_4959041.png "屏幕截图")

#### 选择新增的租户套餐
![输入图片说明](https://foruda.gitee.com/images/1680174991869792688/0dbaadd6_4959041.png "屏幕截图")

#### 新增完成
![输入图片说明](https://foruda.gitee.com/images/1680175033853525725/42e64b4d_4959041.png "屏幕截图")

#### 登录租户
![输入图片说明](https://foruda.gitee.com/images/1680176145378931134/e05f347e_4959041.png "屏幕截图")

![输入图片说明](https://foruda.gitee.com/images/1680176208161104366/44a935f1_4959041.png "屏幕截图")

### 修改租户
#### 配置域名
![输入图片说明](https://foruda.gitee.com/images/1680175251192690133/141fa6a6_4959041.png "屏幕截图")

![输入图片说明](https://foruda.gitee.com/images/1680175431036971650/db522d39_4959041.png "屏幕截图")

#### 没有配置域名
![输入图片说明](https://foruda.gitee.com/images/1680175541165540240/95e211f7_4959041.png "屏幕截图")

#### 强调一下：这不是bug！
> 注：域名的配置就是为了绑定特定租户！

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

> 点一下按钮的事，图略。

## 切换租户（仅超级管理员）
> 注：管理员切换租户不是切换用户，切换的只是数据，管理员拥有所有权限。

![输入图片说明](https://foruda.gitee.com/images/1680176324802967804/5c5d6fc3_4959041.png "屏幕截图")

![输入图片说明](https://foruda.gitee.com/images/1680176431031189788/0c3f924c_4959041.png "屏幕截图")

![输入图片说明](https://foruda.gitee.com/images/1680176496555243569/624ec677_4959041.png "屏幕截图")

