forked from xiongyuxing/tiku-backend.net
feat(saas): implement marketplace and tenant onboarding
This commit is contained in:
@@ -49,7 +49,7 @@ Tenant Active
|
||||
+ DataScope / Resource Scope
|
||||
```
|
||||
|
||||
实现说明:固定 `ProductModuleCatalog`、`PlanModuleEntitlement`、可审计 `TenantModuleOverride` 与 `ICapabilityAccessEvaluator` 已进入数据库授权 Handler;未知或缺失目录模块 fail-closed。平台接口可替换套餐模块权益和设置带原因的租户覆盖,变更在同一事务写审计与 outbox 事件。迁移仅为从未配置权益的存量套餐补齐固定目录,已有显式权益不会被扩权。
|
||||
实现说明:`SaasFeature`、显式 `PermissionModule.RequiredFeatureCode`、不可变套餐版本、`TenantFeatureOverride` 与 `IFeatureAccessService` 已进入数据库授权链路。未知 Feature、未购买模块和失效订阅均 fail-closed;角色绑定保留历史权限,但鉴权和菜单只使用当前有效权限。
|
||||
|
||||
验收:
|
||||
|
||||
|
||||
@@ -6,11 +6,9 @@
|
||||
|
||||
现有后端已经具备继续开发的基础:Host 租户解析、强租户隔离、共享与私有题库、RBAC、Provider 解耦、租户前端运行时配置、学生练习闭环、交易基础和 Worker 基座均已落地。
|
||||
|
||||
后续重点应从“迁移旧 URL”转为“补齐 SaaS 产品闭环”。当前主要缺口是:
|
||||
第九阶段已经完成 SaaS 产品与交付闭环。当前主要缺口是:
|
||||
|
||||
- 平台向租户销售套餐的商城、订单、支付、订阅和计量闭环。
|
||||
- 教师发布作业、考试、批阅和查看班级结果的教学闭环。
|
||||
- 套餐业务能力、后台权限模块和前端菜单仍需彻底分层。
|
||||
- Provider 自助配置、公共题库运营和高流量查询读模型仍需完善。
|
||||
|
||||
## 三端边界
|
||||
@@ -55,8 +53,8 @@
|
||||
| 概念 | 用途 |
|
||||
| --- | --- |
|
||||
| `SaaSFeature` | 平台可销售的业务能力 |
|
||||
| `PlanFeatureEntitlement` | 套餐包含哪些业务能力 |
|
||||
| `FeatureLimit` | 员工席位、学生数、题目数、存储、导出和 AI 用量 |
|
||||
| `SaasOfferingVersionFeature` | 不可变套餐版本包含哪些业务能力 |
|
||||
| `SaasOfferingVersionLimit` | 套餐版本的员工、学生、题目、存储、导出和 AI 额度 |
|
||||
| `PermissionModule` | 后台权限页面的业务分组 |
|
||||
| `BackendPermission` | `view/create/update/import/export/approve/retry` 等操作权限 |
|
||||
| `BackendMenu` | 根据有效权限生成的前端导航,不作为鉴权依据 |
|
||||
@@ -114,16 +112,14 @@
|
||||
|
||||
两类订单、支付账号、回调地址、审计和对账不得共用业务表或服务。
|
||||
|
||||
## 缺失接口与模块
|
||||
## 已完成的 SaaS 商城与交付接口
|
||||
|
||||
### 平台 SaaS 商城
|
||||
|
||||
- 业务模块 CRUD、发布和下架。
|
||||
- 套餐 CRUD、不可变套餐版本、价格版本和套餐对比。
|
||||
- 附加包和额度定义。
|
||||
- 租户侧套餐目录、报价、结算、下单和支付。
|
||||
- 试用转正式、续费、升级、降级和取消。
|
||||
- SaaS 订单、支付、退款、账单、发票、用量和超额计费后台。
|
||||
- 平台模块、额度定义、基础套餐、附加包和不可变版本统一在 `/api/platform-admin/saas/**`。
|
||||
- 租户目录、报价、下单、支付、订阅变更、续费、取消、用量和发票统一在 `/api/tenant-billing/**`。
|
||||
- 人工、微信和支付宝平台收款使用平台主体 Provider,订单和回调与学生商城分离。
|
||||
- `/api/tenant-onboarding/status` 汇总 Owner、订阅、域名、登录方式、Provider 和前端发布状态。
|
||||
|
||||
租户自助账务接口建议统一在 `/api/tenant-billing/**`:
|
||||
|
||||
@@ -188,34 +184,13 @@ POST /api/tenant-admin/providers/secrets/rotate
|
||||
|
||||
## 实施顺序
|
||||
|
||||
### 9A:产品能力模型
|
||||
### 9A~9C:已完成
|
||||
|
||||
- 拆分套餐业务能力、权限模块、菜单和额度。
|
||||
- 定义核心能力、可售卖能力和附加包。
|
||||
- 套餐改为不可变版本,并引入统一 `IFeatureAccessService`。
|
||||
- 所有租户后台授权同时经过套餐能力和 RBAC 判断。
|
||||
- 重新生成 OpenAPI 迁移清单,替换已过时的接口比较结果。
|
||||
|
||||
退出标准:套餐决定租户买了什么,角色决定员工能做什么,菜单只表达前端展示。
|
||||
|
||||
### 9B:平台 SaaS 商城
|
||||
|
||||
- 套餐、模块、附加包和价格后台。
|
||||
- 租户报价、下单、支付和订阅变更。
|
||||
- SaaS 订单、退款、账单、发票、用量和催缴。
|
||||
- 平台支付与租户学生支付彻底分离。
|
||||
|
||||
退出标准:租户可从选择套餐到支付开通自动完成。
|
||||
|
||||
### 9C:租户自助初始化
|
||||
|
||||
- 创建 Owner、选择套餐、创建订阅。
|
||||
- 域名验证和激活。
|
||||
- 登录、SMS、OSS、支付和通知 Provider 配置与连通性测试。
|
||||
- 品牌、主题、导航和首页发布。
|
||||
- 账务中心、用量、续费和升级。
|
||||
|
||||
退出标准:平台不需要直接修改数据库即可交付新租户。
|
||||
- `SaasFeature`、`PermissionModule`、`BackendPermission`、`BackendMenu` 已分层。
|
||||
- `SaasOfferingVersion` 发布后由 Application 和 PostgreSQL guard 双重禁止修改。
|
||||
- `IFeatureAccessService` 统一处理租户、订阅、Feature、覆盖、额度与权限过滤。
|
||||
- PlatformBilling 与 TenantCommerce 使用独立订单、支付、回调和 Provider 配置。
|
||||
- 平台创建租户及 Owner 后,租户可完成购买、开通和 onboarding。
|
||||
|
||||
### 9D:教师教学与考试
|
||||
|
||||
|
||||
Reference in New Issue
Block a user