租户管理功能用户维护租户数据,租户这个概念对内可以称为租户,对外称为企业。
租户功能涉及的表为`c_tenant`,涉及的代码主要为:lamp-tenant-biz、lamp-tenant-controller、lamp-tenant-datasource、lamp-tenant-entity 4个模块。
## 功能讲解
1. 新增租户: 单纯的向 c_tenant 表插入一条租户信息
2. 修改租户信息
3. 删除租户
4. 初始化租户信息: 动态的向**运行中**的其他服务(如文件、消息、认证、权限等服务)发送初始化租户信息的指令,其他服务就动态的给该租户创建数据库,初始化表结构,初始化必要数据,并动态添加 数据源连接。
## 新增租户流程
1. 点击新增按钮, 弹出新增页面,填写租户(企业)编码和租户(企业)名称,租户编码会实时去后台`c_tenant`表校验是否唯一,需要保证租户编码唯一性,填完信息后,点击`确定`按钮。
2. 前端依次调用: submitForm -> save -> post 请求 /api/authority/tenant 接口
3. 后端: SaveController#save -> TenantController#handlerSave -> TenantServiceImpl#save
4. TenantServiceImpl#save中 先校验参数,然后将租户数据保存到 lamp_defaults库的 c_tenant 表, 此时租户状态为待初始化状态。
5. 然后前端需要在单独调用/tenant/initConnect POST ,根据策略模式初始化数据库、表接口、内置数据、动态数据源等
6. 根据 databaseProperties.getMultiTenantType() (`lamp.database.multiTenantType`)的配置,初始化系统数据有3个实现类
6.1. COLUMN模式会执行`ColumnInitSystemStrategy#init`方法,该方法只会将内置的菜单、资源、角色、角色&资源、字典、参数等租户内置的数据,批量插入新的租户表中。
6.2. SCHEMA模式会执行`SchemaInitSystemStrategy#init`方法,该方法首先会创建 租户的业务数据库,然后在库里面执行 `lamp-tenant-server/src/main/resources/sqls/lamp_base.sql` 、`lamp-tenant-server/src/main/resources/sqls/lamp_extend.sql` 脚本初始化表结构, 然后在执行 `lamp-tenant-server/src/main/resources/sqls/lamp_base_data.sql` 、`lamp-tenant-server/src/main/resources/sqls/lamp_extend_data.sql` 脚本初始化租户的数据。
> 注意: lamp-boot 项目没有lamp_extend库, 只有lamp_base库, 但lamp-boot项目base库里的表 = lamp-cloud 项目 base库 + extend 库. lamp-boot 项目的动态脚本在 `lamp-authority-server/src/main/resources/sqls/lamp_base*`
6.3. DATASOURCE模式会执行`DatasourceInitSystemStrategy#init`方法, 该方法异步或者远程调用各个服务的初始化接口,让各个服务自己创建 租户的数据源链接,然后在库里面执行 `resources/sqls/*.sql` 脚本初始化表结构, 然后在执行`resources/sqls/*_data.sql` 脚本初始化租户的数据。
7. 租户信息初始化完成后,会在租户库新增一个隐藏的超级管理员: lampAdmin/lamp, 该账号的主要作用是给`开发者公司运营使用的`
8. 在然后在去 [超级用户](超级用户.md) 页面新增超级管理员, 提供给 租户(企业) 使用
- 简介
- 会员版
- 3.x和4.x的区别
- 新手必读
- 如何高效提问
- 项目地址
- 项目截图
- 架构介绍
- 开发规范
- 租户模式介绍
- lamp-web和lamp-web-plus的区别
- lamp-cloud和lamp-boot区别
- 免费视频&软件下载
- 文档反馈
- lamp-cloud
- 服务介绍
- 环境要求
- 工程导入
- nacos启动(单机版)
- nacos启动(集群版)
- 将配置文件导入Nacos
- seata启动(单机版)
- DATASOURCE模式启动(会员版)
- SCHEMA模式启动
- COLUMN模式
- NONE模式
- lamp-web启动
- lamp-web生产部署
- lamp-web-plus启动(会员版)
- lamp-web-plus生产部署
- lamp-boot
- 环境要求
- 工程导入
- DATASOURCE模式启动(会员版)
- SCHEMA模式启动
- COLUMN模式启动
- NONE模式启动
- lamp-web启动
- lamp-web生产部署
- lamp-web-plus启动(会员版)
- lamp-web-plus生产部署
- 功能介绍
- 租户设置
- 数据源配置(会员版)
- 租户管理
- 超级用户
- 工作台
- 通知公告
- 组织管理
- 机构管理
- 岗位管理
- 用户管理
- 资源中心
- 消息中心
- 短息模版
- 短信中心
- 附件管理
- 流程管理
- 流程部署
- 模型管理
- 系统设置
- 菜单管理
- 角色管理
- 字典管理
- 地区管理
- 参数管理
- 操作日志
- 登录日志
- 在线用户
- 应用管理
- 网关管理
- 限流规则
- 组织访问
- 开发者管理
- 定时任务
- 接口文档
- Nacos
- 服务监控
- 数据库监控
- 缓存监控
- zipkin监控
- SkyWalking监控
- 常用配置
- 如何保证我的代码能更新到最新代码
- 序列化和反序列化
- 修改日志级别
- 文件上传&下载&预览
- 修改租户模式
- 分页
- 导入导出
- 请求放行(忽略token&忽略URI权限&忽略租户编码)
- 异常处理
- 全局返回
- 参数校验(会员版)
- 系统日志
- 自研权限认证(URI、按钮、菜单)
- 数据权限(旧)
- 数据库配置
- Mybatis配置
- 更多数据库/数据源/Mybaits配置
- Redis(缓存)配置
- RabbitMq配置
- 灰度发布
- 上手开发
- 表结构整理
- 项目结构&依赖&调用流程介绍
- 生成一个新服务
- 生成后端代码
- 生成前端lamp-web代码
- 生成前端项目lamp-web-plus代码
- 跨域处理
- Swagger文档调试技巧
- FeignClient接口调用
- 多租户实现原理
- 分布式事务
- Zipkin配置(过时)
- SkyWalking配置
- 代码生成器和自动回显组件使用介绍
- lamp-util原理解析
- 全局注解(lamp-annotation)
- 核心包(lamp-core)
- 自动回显(lamp-echo-starter)
- 权限控制(lamp-security-starter)
- 当前登录用户信息(lamp-jwt-starter)
- 缓存(lamp-cache-starter)
- SpringBoot全局配置(lamp-boot-util)
- SpringCloud全局配置(lamp-cloud-starter)
- 数据源&持久层配置(lamp-databases)
- 对象属性复制(lamp-dozer-starter)
- 操作日志(lamp-log-starter)
- 消息队列(lamp-mq-starter)
- 在线文档(lamp-swagger2-starter)
- 前后端表单统一验证(lamp-validator-starter)
- 防止Xss攻击(lamp-xss-starter)
- 生产部署
- 部署前言
- jar部署