背景
引入多租户控制平面(control-plane)后,平台前端确立为同仓双 app:
| App |
平面 |
受众 / 身份 |
对接后端 |
拓扑 |
apps/console |
使用平面 · 租户控制台 |
租户用户(JWT 带 tenant,org 作用域) |
governance/security/tools-bi/privacy/data-foundation |
per-tenant / 按 org 多租户 |
apps/admin |
管理平面 · 运营控制台(本 Issue) |
平台运营方(跨租户 superadmin,不绑 org) |
主要 control-plane |
跨租户单例,独立域名 |
为何拆两个 app:受众/拓扑不同,且 admin 含「开通/销毁租户、改配额、看全租户」高权限操作——其 bundle 绝不能与租户用户同包(安全爆炸半径)。两 app 各自构建产物、独立域名、互不可达。
为何同仓不拆仓:设计系统 / 白标 / SDK / i18n 经 packages/* 共享,避免复制、保一致、维护成本最低。
选型与目录见仓内 docs/00-前端初始化-spec.md(§0 双平面、§5 目录、§6 执行项 11–14)。
依赖
验收清单(DoD)
边界(务必遵守)
- 「租户自管理」不属于本 Issue:一个租户管自己的成员/配额视图,是
apps/console 内按角色门控区段;本 Issue 只做跨租户运营台。
- admin 只对接
control-plane(及必要的 Keycloak Admin 视图代理),不写各分系统业务逻辑。
- 🔴 信息红线:公开开源仓,禁止任何甲方/客户可识别信息与项目机密;示例租户一律脱敏(
tenant-acme / tenant-demo)。详见 CLAUDE.md。
如需调整结构,请在本 Issue 讨论后更新 docs/00-前端初始化-spec.md,保持 spec 为单一事实源。
背景
引入多租户控制平面(
control-plane)后,平台前端确立为同仓双 app:apps/consoletenant,org 作用域)apps/admincontrol-plane为何拆两个 app:受众/拓扑不同,且 admin 含「开通/销毁租户、改配额、看全租户」高权限操作——其 bundle 绝不能与租户用户同包(安全爆炸半径)。两 app 各自构建产物、独立域名、互不可达。
为何同仓不拆仓:设计系统 / 白标 / SDK / i18n 经
packages/*共享,避免复制、保一致、维护成本最低。依赖
packages/*。验收清单(DoD)
apps/console为模板新增apps/admin(独立入口index.html/vite.config.ts/ 构建产物),复用packages/*(ui / brand / theme / i18n / sdk),不复制白标与设计系统packages/*(ui / brand / theme / i18n / sdk),两 app 共用control-plane,先 msw mock 后接真实 API):config.js(SaaS=我们品牌 / 私有化=客户品牌),不按租户换肤deploy/增加 admin 独立 Dockerfile + nginx +config.js模板;CI 矩阵覆盖 console + admin 两 app边界(务必遵守)
apps/console内按角色门控区段;本 Issue 只做跨租户运营台。control-plane(及必要的 Keycloak Admin 视图代理),不写各分系统业务逻辑。tenant-acme/tenant-demo)。详见CLAUDE.md。