平台租户与套餐
# 平台租户与套餐
平台运营使用 /platform/auth/login 登录,租户账号使用租户入口。两种身份的会话、权限和动态路由相互隔离;平台账号只能管理租户元数据,不能借平台入口读取租户用户、组织或业务日志。
# 开通租户
先执行数据库迁移到 schema v11,并通过独立 bootstrap 准备平台账号。初始化口令由操作者提供,首次登录按提示改密;迁移不创建账号或通用密码。启动方法见 快速启动(后端)。
- 打开「套餐管理」,创建套餐,选择已发布能力并填写账号配额。套餐编码创建后固定。保留的
legacy兼容套餐不能编辑;调整历史租户时,新建普通套餐后逐个分配。 - 打开「租户管理」,新建租户,填写编码、名称及套餐。新租户是「待初始化」,此时不能登录。
- 在该租户行选择「初始化」,填写管理员账号和符合当前安全策略、至少 14 字符的初始口令。生产通过 HTTPS 与统一内容加密通道提交;不将口令放到 URL、日志或邮件中。提交后页面清空口令。
- 成功后租户启用,管理员首次登录必须改密。初始化失败仍是待初始化,可核对错误后重试。网络结果不确定时先刷新详情;重复初始化已成功租户返回原租户,不重建账号、不覆盖密码。
查看租户要求 platform:tenant:read;创建、初始化、更新分别要求 platform:tenant:create、platform:tenant:initialize、platform:tenant:update。套餐选择另外需要 platform:package:read;能力和权限选项需要 platform:catalog:read。页面隐藏按钮与后端权限判断同时存在。
# 停用、到期与恢复
- 「停用」保留数据,阻止登录、刷新及新的租户访问。「恢复」后旧会话仍然无效,用户需要重新登录。
- 「到期日」接受带时区的日期时间,如
2027-10-23T00:00:00+08:00。留空明确表示长期有效;设置过去时间立即使租户到期,不依赖后台任务扫描。 - 人工停用与自然到期分别保留:恢复一个已到期租户后仍需续期。续期或调整期限也会使旧会话失效。
- 详情显示状态、是否初始化及账号用量。停用账号仍占配额,只有删除账号才释放名额;初始管理员也计入。
# 套餐和权限上限
套餐编辑器先显示关联租户数量,再提交新版本。移除能力后,相关菜单和 API 同时受限;角色授权、租户自定义选择和业务数据保留。重新开通能力后,仍有效的原选择可以再次生效。
配额降到现有用量以下不会删除账号,也不阻止对已有数据的正常读、改、删;只有新增账号被拒绝,返回 409005「租户用户配额已满」。并发新增仍受同一事务和租户锁约束。
「权限上限」提供两种模式:
| 模式 | 行为 |
|---|---|
| 继承 | 使用当前套餐与启用目录内的全部可用权限 |
| 自定义 | 只允许明确选择的权限;空选择表示不开放任何业务权限,租户管理员也受限制 |
自定义保存只能选择当前套餐已开通的发布权限。降级后原有的超出选择仍保留,页面会明确提示,保存前需要操作者主动移除;页面不会静默清空配置。租户管理员再向角色分配权限时,不能突破该上限。有效权限变化会推进服务端授权版本,后续请求和菜单重新按主库计算。
# 冲突与审计
每次打开编辑器重新读取详情版本。其他运营已修改时,保存返回 409001;关闭编辑器、刷新、核对后重新编辑,不会盲目重试覆盖。初始化口令在成功、失败、取消及页面卸载时清空,不进入浏览器持久化存储。
「平台操作审计」要求 platform:audit:read,显示时间、操作、平台主体及请求标识。平台事件独立存储,查询也留痕;这里不聚合任何租户业务日志。租户内部安全策略仍见 租户与安全策略。
实际实现、事务边界和验证证据见 M3 实施记录。完整发布验收属于 M4,本页不表示已完成生产发布。
平台幂等初始化租户(须平台身份与对应权限;口令仅经环境变量提供):
export BOOTSTRAP_TENANT_CODE=example
export BOOTSTRAP_TENANT_NAME=示例企业
# 其余 BOOTSTRAP_* 与租户 bootstrap 相同;重复初始化会失败并保留已有数据。
bash scripts/fago.sh bootstrap