feat(saas): implement marketplace and tenant onboarding
This commit is contained in:
10
README.md
10
README.md
@@ -83,12 +83,15 @@ PostgreSQL guard 负责 EF 无法表达的跨表租户不变量:
|
||||
- `TenantQuestionReference` 只能引用平台公共题或当前租户私题;
|
||||
- `TaxonomyNode` 父节点只能属于平台主体或当前租户;
|
||||
- 需要读取 `tenants.mode` 或比较 owner 关系的条件约束。
|
||||
- 已发布套餐版本及其模块、额度清单不可修改;订阅套餐类型与订单快照必须一致。
|
||||
- 套餐控制 Feature,角色控制 Permission,菜单仅按有效权限生成导航;内容后台按题库、词汇、手册、视频、分数线和站点内容分模块授权。
|
||||
- 员工、学生、私有题、存储、导入、导出和短信额度在业务写入时原子消费,Worker 定期按真实数据校准当前量。
|
||||
|
||||
维护规则:
|
||||
|
||||
1. SQL 只放在 `Tiku.Infrastructure/Persistence/PostgreSqlTenantConstraintSql.cs`。
|
||||
2. Migration 只调用 `migrationBuilder.EnsureTenantIsolationGuards()` / `DropTenantIsolationGuards()`。
|
||||
3. 重建 `InitialSchema` 后,`Up()` 末尾必须调用 `EnsureTenantIsolationGuards()`,`Down()` 开头必须调用 `DropTenantIsolationGuards()`。
|
||||
1. 租户 SQL 放在 `PostgreSqlTenantConstraintSql.cs`,SaaS 商品 SQL 放在 `PostgreSqlSaasCatalogConstraintSql.cs`。
|
||||
2. Migration 只调用集中 helper,不复制 trigger SQL。
|
||||
3. 重建 `InitialSchema` 后,`Up()` 末尾必须调用 `EnsureTenantIsolationGuards()` 和 `EnsureSaasCatalogGuards()`;`Down()` 先调用对应 Drop helper。
|
||||
4. 新增 guard 前先判断能否用 EF FK / unique / check 表达;表达不了才加 PostgreSQL guard。
|
||||
5. 每个 guard 必须有 migration script 断言和真实 PostgreSQL 越权测试。
|
||||
|
||||
@@ -110,6 +113,7 @@ PostgreSQL guard 负责 EF 无法表达的跨表租户不变量:
|
||||
- [迁移路线与剩余范围](docs/migration-roadmap.md)
|
||||
- [API 契约基线说明](docs/migration/contracts/README.md)
|
||||
- [AI 底座设计](docs/migration/phase-8-ai-foundation.md)
|
||||
- [第九阶段:SaaS 模块商城与租户交付闭环](docs/migration/phase-9-saas-marketplace-and-onboarding.md)
|
||||
|
||||
## 常用命令
|
||||
|
||||
|
||||
Reference in New Issue
Block a user