租户管理
租户管理是对系统中的租户进行管理,一个租户会绑定一个用户,绑定的这个用户就是这个租户的管理员。
添加和修改租户说明
标识为重要
的表示系统已经使用该数据,标识为不重要
的表示系统未使用该数据仅仅只是做一个记录:- 租户名称(重要):租户的名称
- 租户套餐(重要):在租户套餐管理中添加的租户套餐,在添加租户时进行选择,从而绑定租户的菜单权限
- 过期时间(重要):租户的使用期限,如果无限期可以填写一个较大的日期比如2099年
- 账号额度(重要):该租户可在系统中添加的用户数量
- 数据隔离方式(重要):可选择字段隔离或数据库隔离。选择字段隔离是所有租户都是用同一个数据库,通过表中的tenant_id字段进行数据隔离。选择数据库隔离是可以指定该租户使用的数据源,在操作时会切换到这个数据源进行操作。
- 文件存储方式(重要):可选择该租户使用哪种方式存储文件,选择后该租户上传和下载文件时就会切换到对应的方式进行操作。
- 备注(不重要):租户的描述信息
- 租户用户信息(重要):添加租户时,需要同时添加的用户信息
租户数据字段隔离说明
目前实现的是用字段隔离租户数据,使用了mybatis-flex自带的多租户功能。如果你新添加的功能需要进行租户隔离,那么数据库的表要加上tenant_id
字段,在实体类要给tenantId
字段加上@Column(tenantId = true)
注解,来标明这张表要进行租户隔离。
当然你的数据库字段名也可以不叫tenant_id
,只要你的实体类加了@Column(tenantId = true)
注解,就会认为该字段是租户隔离的字段,查询、修改、新增、删除时会将这个条件拼接接sql语句中来实现租户隔离。但为了统一最好也叫tenant_id
。
如何忽略多租户
有两种方式可以忽略多租户,任选一种适合自己业务的使用即可,忽略后对数据库的操作将不会拼接tenant_id = ?
。
- 方式一:在受spring管理Bean的方法上添加
@TenantIgnore
注解,那么这个方法将会忽略多租户。因为这个注解是基于AOP实现的,所以需要受spring管理的Bean中的方法才会生效。 - 方式二:使用mybatis-flex提供的方式忽略多租户,mybatis-flex提供了两种方式忽略多租户,任选一种适合自己业务的使用即可,以下是代码示例:
java
//粗颗粒度使用方式
TenantManager.withoutTenantCondition(() -> {
//在这里所有操作将会忽略多租户
});
//细颗粒度使用方式
try {
//忽略多租户开启
TenantManager.ignoreTenantCondition();
//在这里所有操作将会忽略多租户
} finally {
//结束后,需要将忽略多租户关闭,如果不关闭,之后的操作都将忽略多租户
TenantManager.restoreTenantCondition();
}
多租户开关
系统是默认开启多租户的,如果你不需要这个多租户功能,那么可以在参数配置中找到多租户开关,对多租户进行关闭,关闭后系统将不再启用多租户。目前的参数配置是每次都需要从redis获取这个多租户开关的配置,来校验系统开启还是关闭多租户,如果可以确定不需要使用,可直接修改代码关闭多租户,减少redis的操作,修改位置com.minimalist.basic.config.tenant.TenantInit#getTenantOnOff
,getTenantOnOff
方法返回true说明打开多租户,返回false说明关闭多租户,可以直接删除方法内的代码,改为return false;
。