mirror of
https://github.com/hpd840321/craftlabs-authorization-sdk.git
synced 2026-06-09 10:00:30 +08:00
docs(i1): engineering index, parallel tracks, and product context
Add PARALLEL_ITERATION_INDEX, workspace layout, system architecture, three-track execution packs, BPM/product references, and planned service manifests. Supports I1 alignment across backend, web, and SDK. Made-with: Cursor
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# 比特安索方案:工作区走查 — 地址与「回调」评估
|
||||
|
||||
> **范围**:本仓库内与比特安索(Bitanswer)相关的 URL、回调概念及受影响系统能力。
|
||||
> **日期**:2026-04-06
|
||||
> **关联**:[授权制度与规则](bitanswer-licensing-design-and-rules.md) · [客户端 API 纲要](bitanswer-client-api-overview.md) · [创飞侧平台与对接能力评估](chuangfei-bitanswer-integration-platform.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. 结论摘要
|
||||
|
||||
| 类别 | 是否在本仓库配置 | 典型形态 | 涉及系统功能 |
|
||||
|------|------------------|----------|--------------|
|
||||
| **`bitanswer.url`(授权服务地址)** | 是(JSON 配置 + Schema) | `https://…` 云/E3、`bit://ip:port` 集团、`lic://…` 本地等 | 登录、在线激活/升级、会话与心跳、特征项校验等与 **Bitanswer 运行时** 直连的能力 |
|
||||
| **控制台「规则」HTTP Callback** | 否(官方控制台配置) | 业务系统提供的 `https://…` Webhook + `x-bitanswer-token` | **订单/资产/审计**:激活前后、设备绑定、云保保会话失效等事件的异步通知与集成 |
|
||||
| **SDK 属性里的函数指针回调** | 未在本 SDK 封装层暴露 | C 侧 `SetAttr` + `ATTR_HB_*_CALLBACK` 等 | **进程内**心跳失败/停止、集团排队等待等 **UI 或重连策略**,非 HTTP |
|
||||
| **`selfhosted.baseUrl`** | 是(另一 provider) | 自研授权 HTTP 根地址 | 与比特方案并行;本仓库仅 `selfhosted_http_ping` 等占位,非 Bitanswer 官方回调 |
|
||||
|
||||
本 SDK 当前 **`BitAnswerProvider` 仅委托 native,未实现规则 Webhook 接收端**;若产品要在比特控制台配规则回调,需在 **独立后端服务** 实现 POST 接口与鉴权。
|
||||
|
||||
---
|
||||
|
||||
## 2. 本仓库中出现的「地址」清单
|
||||
|
||||
### 2.1 配置项:`bitanswer.url`
|
||||
|
||||
- **定义**:[`BitanswerConfigSection`](../java/craftlabs-auth-core/src/main/java/cn/craftlabs/auth/config/BitanswerConfigSection.java) 字段 `url`。
|
||||
- **校验**:[`AuthConfigs`](../java/craftlabs-auth-core/src/main/java/cn/craftlabs/auth/config/AuthConfigs.java) 在 `provider=bitanswer` 时要求非空。
|
||||
- **Schema**:[`schemas/craftlabs-auth-config.schema.json`](../schemas/craftlabs-auth-config.schema.json) 描述为 **Bit_Login `szURL`**(云 `http(s)://`、集团 `bit://`、本地 `lic://` 等)。
|
||||
- **示例**:
|
||||
- [`examples/config/floating.bitanswer.json`](../examples/config/floating.bitanswer.json)、[`school.bitanswer.json`](../examples/config/school.bitanswer.json):`https://cloud.bitanswer.example/e3`(占位云地址)。
|
||||
- [`examples/config/wharf.bitanswer.json`](../examples/config/wharf.bitanswer.json):`bit://license.example.com:8273`(集团服务)。
|
||||
|
||||
**功能映射(客户端 → 比特侧)**:
|
||||
|
||||
- **登录与会话**:`Bit_Login` / `Bit_LoginEx` 连到该 URL 所指云中心或集团服务;决定云/集团/混合行为还与 `loginMode`、环境变量等有关(见 `docs/bitanswer-client-api-overview.md` §2–3)。
|
||||
- **在线激活与升级**:同类 URL 会传给 `Bit_UpdateOnline`、`Bit_GetUpdateInfo` 等(官方 API 表见 `docs/bitanswer-client-api-overview.md` §5)。
|
||||
- **可选 `rootPath`**:配置项中有 `rootPath`,对应 `Bit_SetRootPath`,影响本地授权文件查找根目录(与 URL 形态 `root://` 语义相关,见 `docs/c.md`)。
|
||||
|
||||
### 2.2 文档中的规则 Callback URL(非本仓库代码配置)
|
||||
|
||||
- **出处**:[`docs/bitanswer-licensing-design-and-rules.md`](bitanswer-licensing-design-and-rules.md) §5.5,对应官方 [规则](https://doc.bitanswer.cn/docs/function/rule/) 文档。
|
||||
- **形态**:JSON 动作数组中的 `callback.url`,请求头可含 `x-bitanswer-token`。
|
||||
- **触发事件**(与业务系统相关):`sn:pre_activate` / `sn:post_activate`、`device:pre_activate` / `device:post_activate`、`yunbaobao:session_logout` 等。
|
||||
|
||||
**功能映射(贵司后端若承接回调)**:
|
||||
|
||||
| 事件 | 建议评估的系统能力 |
|
||||
|------|---------------------|
|
||||
| `sn:pre_activate` | 激活前风控:黑名单、订单状态、SN 与合同是否一致;可配合异步拒绝策略(以实现为准) |
|
||||
| `sn:post_activate` | 开通交付、CRM 状态更新、用量计费起点、通知客户 |
|
||||
| `device:pre_activate` / `post_activate` | 设备台账、换机策略、终端数/浮动策略与内部资产系统对账 |
|
||||
| `yunbaobao:session_logout` | 会话吊销联动:踢下线、清理服务端会话、安全审计 |
|
||||
|
||||
**注意**:官方说明回调为 **异步 POST**,**响应体可被忽略**;接收方应 **幂等**、校验 `x-bitanswer-token`、限流与防重放。
|
||||
|
||||
### 2.3 SDK 文档中的「回调」= C 函数指针(非 URL)
|
||||
|
||||
- **出处**:[`docs/c.md`](c.md) 中 `Bit_SetAttr` 相关常量,例如:
|
||||
- `ATTR_HB_STOPED_CALLBACK` / `ATTR_HB_STOPED_CALLBACK_EX`:心跳停止
|
||||
- `ATTR_HB_RETRY_FAILED_CALLBACK` / `ATTR_HB_RETRY_CALLBACK_EX` / `EX2`:心跳重试失败/重试
|
||||
- `ATTR_HB_RETRY_SUCCESS_CALLBACK`:心跳重试成功
|
||||
- `ATTR_QUEUE_WAIT_CALLBACK`:集团排队等待(与 `BIT_QUERY_WAIT` 等配合)
|
||||
|
||||
**功能映射**:在 **同一进程内** 由 Bitanswer 客户端库调用开发商注册的函数,用于 **监控与授权服务的连接质量、排队 UX、自动重连**。
|
||||
**本仓库**:[`BitAnswerProvider`](../java/craftlabs-auth-bitanswer/src/main/java/cn/craftlabs/auth/bitanswer/BitAnswerProvider.java) 未暴露 `setAttr`/这些回调;若需使用,要在 **native 层或后续 JNI** 扩展。
|
||||
|
||||
### 2.4 其它:`selfhosted.baseUrl`
|
||||
|
||||
- **定义**:[`SelfhostedConfigSection`](../java/craftlabs-auth-core/src/main/java/cn/craftlabs/auth/config/SelfhostedConfigSection.java)。
|
||||
- **代码**:[`native/src/selfhosted/http_client.h`](../native/src/selfhosted/http_client.h) 中 `selfhosted_http_ping(base_url)`。
|
||||
- **说明**:属于 **自研授权 provider**,与比特控制台规则 Callback **无直接对应**;评估部署时不要与 `bitanswer.url` 混淆。
|
||||
|
||||
---
|
||||
|
||||
## 3. 对实现与运维的检查项建议
|
||||
|
||||
1. **`bitanswer.url`**:区分环境(云/E3 生产、测试集团 `bit://`、纯本地 `lic://`);与 **产品识别码 `applicationData`**、**SN** 一并纳入密钥与配置管理。
|
||||
2. **规则 Callback URL**:在架构图中单独标注为 **比特云 → 贵司公网/内网穿透 HTTPS**;明确 **谁生成 `x-bitanswer-token`**、轮换与日志脱敏(含 `sn`、`mid`、IP)。
|
||||
3. **函数指针回调**:若未来在 native 启用,明确线程模型与 **不得在回调中执行阻塞 IO** 等约束(以官方 `bitanswer.h` 为准)。
|
||||
4. **文档与代码一致性**:当前 [`native/src/bitanswer/bitanswer_adapter.h`](../native/src/bitanswer/bitanswer_adapter.h) 仍为占位;真正接入 `Bit_Login` 等后,应同步更新本文 §2.1 的实现引用。
|
||||
|
||||
---
|
||||
|
||||
## 4. 修订记录
|
||||
|
||||
| 日期 | 说明 |
|
||||
|------|------|
|
||||
| 2026-04-06 | 初版:基于工作区 grep 与核心配置/Java/native 文件走查。 |
|
||||
@@ -0,0 +1,188 @@
|
||||
# 比特授权云:授权制度设计与规则机制(实现依据)
|
||||
|
||||
> **文档来源**(官方):
|
||||
>
|
||||
> - [授权设计与创建](https://doc.bitanswer.cn/docs/function/licensing-design-creation/)
|
||||
> - [规则](https://doc.bitanswer.cn/docs/function/rule/)
|
||||
>
|
||||
> **用途**:作为本仓库及相关功能**设计、实现、联调**时的领域依据;与更宽范围的机制总览见 `[bitanswer-authorization-overview.md](./bitanswer-authorization-overview.md)`。
|
||||
> **整理日期**:2026-04-06
|
||||
> **对接落地**:创飞侧平台、交付物与能力评估见 [chuangfei-bitanswer-integration-platform.md](./chuangfei-bitanswer-integration-platform.md)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 授权制度:四层对象
|
||||
|
||||
授权由四层对象叠加定义「卖什么、怎么卖、发什么」。
|
||||
|
||||
|
||||
| 层级 | 作用 |
|
||||
| -------------------- | ------------------------------------------------------------------------------- |
|
||||
| **产品 (Product)** | 定义被授权对象:一套软件或组合;承载**授权功能模块的集合**。含唯一产品名、**特征项**(功能/加密点)、**配置项**(应用与用户小数据)。 |
|
||||
| **模版 (Template)** | 产品特征项的**子集**,限定某次授权里**可用模块及版本**,常对应一个**发行版本**。 |
|
||||
| **业务 (Business)** | 定义**销售/授权商业模式**:云授权、集团授权、单机授权等;在此配置各类**授权属性组合**。 |
|
||||
| **授权 (Entitlement)** | 实际发给用户的授权:**从模版继承模块**;**从业务继承授权类型**,但可**改写**业务允许的授权属性。由全球唯一 **16 位字母数字 SN** 标识。 |
|
||||
|
||||
|
||||
### 1.1 授权内容更新与同步
|
||||
|
||||
- 授权内容更新后,客户端可用对应 **SN** 升级授权内容。
|
||||
- **云授权**:更新可较快反映到客户端,应用**无需重启**。
|
||||
- **集团授权、单机授权**:更新在客户端**下次连接服务器**时同步。
|
||||
- **单机**:带**智能连接**的会在联网时自动同步;带**强制认证**的需定期连服务器;其它情况多在授权失效时才尝试连服务器。
|
||||
- 开发商也可选择**手动**更新客户端本地授权内容。
|
||||
|
||||
---
|
||||
|
||||
## 2. 业务侧授权属性(约束维度)
|
||||
|
||||
在业务中可配置的约束项(不同授权类型下可用组合不同),官方文档列出的包括:
|
||||
|
||||
|
||||
| 属性 | 说明 |
|
||||
| --------------- | ----------------------------------- |
|
||||
| **连接类型**(单机) | 离线,或可自动进行后台验证的**智能连接**。 |
|
||||
| **强制认证** | 客户端**最大离线时间**;超过后须与服务器再次验证才能继续使用。 |
|
||||
| **安装限制** | 客户端允许**激活次数**;单机授权下由**所有客户端共享**该次数。 |
|
||||
| **有效期** | 从激活起算的最长使用时间。 |
|
||||
| **用户数** | 集团授权:集团服务器可支持的**最大并发访问用户数**。 |
|
||||
| **起始日期 / 结束日期** | 授权生效、失效的**绝对时间**。 |
|
||||
| **使用次数** | 客户端能成功执行 **Login** 的次数上限。 |
|
||||
| **终端限制** | 单机授权允许在多少台客户端上被激活。 |
|
||||
|
||||
|
||||
通过不同业务(例如演示业务、永久有效单机正式版业务)组合上述属性,对齐销售与交付形态。
|
||||
|
||||
---
|
||||
|
||||
## 3. 特征项 (Feature):授权在代码中的语义
|
||||
|
||||
- **标识**:特征 **ID**(整数,API 调用用)+ **名称**(界面展示);在产品内唯一。
|
||||
- **产品级**:数量、名称、类型、是否**可覆盖**、特征组等**仅能在产品特征项界面**完成。
|
||||
- **模版 / 授权码级**:只能**选择**特征项、设置特征项的**授权属性**,或修改带「可覆盖」的特征项**值**。
|
||||
|
||||
### 3.1 特征项在产品上的基本属性
|
||||
|
||||
- **ID**:系统分配,用于客户端 API 指定特征项。
|
||||
- **名称**:用途说明;在集团授权管理界面等对用户可见。
|
||||
- **类型**:决定可进行的操作(见下表)。
|
||||
- **可覆盖**:是否允许在模版或授权码中**重写该特征项的值**(不同用户/模版需要不同特征值时应开启)。
|
||||
- **值**:影响特征项 API 行为。
|
||||
|
||||
### 3.2 授权码上的特征项授权属性
|
||||
|
||||
在授权码中可设置/修改(且同时受**整条授权**的授权属性约束):
|
||||
|
||||
- **有效期**:自所在授权码激活起算,单位**天**。
|
||||
- **结束日期**:可用到结束日当天 24 点。
|
||||
- **用户数**:仅**集团授权**类型 SN 可设,为该特征项的可用用户数。
|
||||
|
||||
### 3.3 特征项类型与 API
|
||||
|
||||
|
||||
| 类型 | 含义 | 主要 API |
|
||||
| ------ | ----------- | --------------------------------- |
|
||||
| **只读** | 只读数据,客户端不可写 | `ReadFeature` |
|
||||
| **读写** | 可读可写 | `ReadFeature`、`WriteFeature` |
|
||||
| **算法** | 算法因子,不可直接读写 | `ConvertFeature`(单向转换) |
|
||||
| **密钥** | AES 密钥因子 | `EncryptFeature`、`DecryptFeature` |
|
||||
|
||||
|
||||
所有类型均支持 `**QueryFeature`**、`**ReleaseFeature**`:检查是否存在及是否有效。
|
||||
**集团授权**:`QueryFeature` 会占用模块用户数,`ReleaseFeature` 释放;文档要求二者在代码中**成对**出现。
|
||||
|
||||
### 3.4 特征组
|
||||
|
||||
- 用于管理与勾选;默认有 **「所有」** 组包含全部特征项。
|
||||
- 可新建组并向组内添加特征项;**新特征项默认不会**进入除「所有」外的组,需手工维护。
|
||||
|
||||
### 3.5 实现与安全注意
|
||||
|
||||
- 典型用法:每需单独授权的模块分配**主特征项**做 `QueryFeature` / `ReleaseFeature`;辅以加密类特征项;模块退出前释放占用(集团场景尤其重要)。
|
||||
- 避免**过于频繁**调用特征项 API,以免影响性能。
|
||||
- **DRM 产品**:特征项类型不可设置,且不可选「可覆盖」(用于内容加密密钥)。
|
||||
- **密钥 / 算法**类型:操作员仅读权限时特征值不可见,显示为 `**`**。
|
||||
|
||||
---
|
||||
|
||||
## 4. 配置项 (Data):非安全存储
|
||||
|
||||
- **用途**:`Name` / `Value` 字符串对,存应用配置或少量运行时数据;**不应**代替特征项做安全控制。
|
||||
- **与特征项区别**:特征项侧重功能点/加密点;配置项侧重应用与用户数据。
|
||||
- **覆盖**:模版或授权码中可创建**产品中未预先定义**的配置项名;若与产品配置项同名则运行时取得**覆盖后**的值。
|
||||
- **删除**:可删除授权码中的配置项;**删除产品或模版中定义的配置项会返回错误**。
|
||||
- **枚举**:`GetDataNum`、`GetDataName` 等。
|
||||
- **可靠性**:客户端库可能**缓存**配置项;异常断电等情况下**近期更新可能丢失**,应用需容错。存储为 **UTF-8**,含中文时客户端需注意编码处理。
|
||||
|
||||
---
|
||||
|
||||
## 5. 规则 (Rule):云端可编程扩展
|
||||
|
||||
与静态「产品—模版—业务—授权」模型并列,**规则**用于在特定**事件**上注入 **JavaScript 判断 + 动作**,扩展业务逻辑。
|
||||
|
||||
### 5.1 结构
|
||||
|
||||
|
||||
| 组成部分 | 说明 |
|
||||
| ------- | ------------------------------------------- |
|
||||
| **事件** | 规则入口;向触发器提供 `event` 对象(不同事件字段不同)。 |
|
||||
| **触发器** | JavaScript 编写的条件;返回 **布尔**;`true` 时执行动作。 |
|
||||
| **动作** | 触发后执行的操作(如回调);一条规则可有多个动作,**执行顺序不严格保证**;可为空。 |
|
||||
|
||||
|
||||
**约束**:一条规则**仅对应一个事件**;创建后需在列表中**启动**方会在下次事件发生时生效。
|
||||
|
||||
### 5.2 已定义事件(文档列表)
|
||||
|
||||
|
||||
| ID | 代码 | 名称 |
|
||||
| ------ | -------------------------- | -------------------------- |
|
||||
| 0x0001 | `yunbaobao:session_logout` | 云保保客户端会话失效(登出、踢出、过期) |
|
||||
| 0x0101 | `sn:pre_activate` | 授权码**首次**激活**前** |
|
||||
| 0x0102 | `sn:post_activate` | 授权码**首次**激活**后** |
|
||||
| 0x0301 | `device:pre_activate` | 设备激活**前**(设备**重新激活**时也会执行) |
|
||||
| 0x0302 | `device:post_activate` | 设备激活**后** |
|
||||
|
||||
|
||||
### 5.3 事件载荷要点(实现联调参考)
|
||||
|
||||
- 多类事件含 `**snInfo`**:`sn`、`type`(如 FLOAT)、`volumeNumber`(终端限制)、`activeDate`、`startDate`、`endDate`(文档说明为与 `expirationDays` 合计相关)、`expirationDays`、`userNumber`、`transferVolume`、`transferNumber`、`status`、`customInfo`、`ip` 等。
|
||||
- `**sn:post_activate**`、`**device:post_activate**` 等还含 `**device**`:`regDate`、`mid`(设备指纹)、`status`、`deviceCount`(已激活设备总数)等。
|
||||
- `**yunbaobao:session_logout**`:`sn`、`sid`、`type`(LOGOUT / EXPIRED / CLEAR / OTHER)、`logout_time` 等。
|
||||
|
||||
详细字段以官方文档各事件小节为准。
|
||||
|
||||
### 5.4 触发器运行环境
|
||||
|
||||
- 语言:**ECMAScript 5.1**;**禁止使用 `const`、`let`**。
|
||||
- **无**任意 IO;**无** `console.log`;**无** `window`、`document`、`location` 等。
|
||||
- 保存前应用控制台**调试功能**验证脚本。
|
||||
|
||||
### 5.5 动作:回调 (Callback)
|
||||
|
||||
- 配置为 **JSON 数组**;元素示例形态包含 `callback.url`、`callback.headers`(如 `x-bitanswer-token` 用于认证)。
|
||||
- **异步**执行;服务端响应**可被忽略**。
|
||||
- 使用 **POST**,**JSON** body;内容包含 `event`、`rule`、`data`(含对应事件的 `snInfo` / `device` / `ip` 等)。
|
||||
|
||||
---
|
||||
|
||||
## 6. 与实现工作的对应关系(摘要)
|
||||
|
||||
|
||||
| 领域概念 | 实现侧通常对应 |
|
||||
| ----------------- | ------------------------------------------ |
|
||||
| 产品 / 模版 / 业务 / SN | 控制台配置与发放流程;SDK 登录对象与产品绑定 |
|
||||
| 业务授权属性 | 期限、终端、离线、次数、用户并发等策略的建模与校验 |
|
||||
| 特征项类型与 API | 功能开关、加密点、集团用户数占用与释放 |
|
||||
| 配置项 | 非敏感 K/V 同步;注意缓存与持久化边界 |
|
||||
| 规则 | Webhook/内部服务对接激活与设备生命周期;ES5.1 脚本与回调幂等、安全校验 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 7. 修订记录
|
||||
|
||||
|
||||
| 日期 | 说明 |
|
||||
| ---------- | ------------------------- |
|
||||
| 2026-04-06 | 初版:依据「授权设计与创建」「规则」两篇整理入库。 |
|
||||
@@ -0,0 +1,391 @@
|
||||
# 广州创飞人工智能技术有限公司 — 与比特安索对接:平台与交付物能力评估
|
||||
|
||||
> **平台定义**:**广州创飞人工智能技术有限公司客户商务与交付管理平台** —— 收口 **客户与项目、合同、交付产品、具体授权(含比特安索集成)** 等功能模块,支撑规模化商务履约与许可运营。
|
||||
> **目的**:在 [回调与地址走查](bitanswer-callbacks-endpoints-assessment.md)、[授权制度与规则](bitanswer-licensing-design-and-rules.md) 等结论基础上,明确 **创飞侧需建设或提供的平台形态**、**具体交付软件**,以及 **应具备的能力**,用于立项、架构评审与验收。
|
||||
> **日期**:2026-04-06
|
||||
> **说明**:比特安索侧能力以官方文档与控制台为准;本文聚焦 **创飞作为软件开发商 + 集成方** 的交付范围。
|
||||
> **双视角分析**:§6 为 **产品经理** 维度,§7 为 **技术架构(与比特对接的抽象)** 维度。
|
||||
> **功能清单**:模块划分与详细功能点见 [chuangfei-platform-product-modules.md](./chuangfei-platform-product-modules.md)。
|
||||
> **业务流程与排期**:全业务 BPM、版本与迭代计划见 [chuangfei-platform-bpm-and-roadmap.md](./chuangfei-platform-bpm-and-roadmap.md)。
|
||||
> **工程划分**:工作区目录边界与规划仓库见 [engineering/WORKSPACE_ENGINEERING_LAYOUT.md](./engineering/WORKSPACE_ENGINEERING_LAYOUT.md) · [根目录 engineering/](../engineering/README.md)。
|
||||
> **实现与使用分档**:§8 为 **前端 + 后端**(**Java Spring Boot 4.0.\* 长期稳定线 + Vue 3 + Vite**)分阶段开发评估;§9 为 **产品使用**(MVP / Mid / Full)分阶段评估。后端 **固定主版本线为 Spring Boot 4.0.\***(补丁随官方 **4.0.x** 升级,**不用里程碑版**),以便与 **Spring 生态后续 AI 相关扩展**(如 Spring AI、统一配置与可观测性栈)同代演进,降低后续集成改造成本。
|
||||
|
||||
---
|
||||
|
||||
## 1. 对接边界(谁负责什么)
|
||||
|
||||
| 边界 | 比特安索(授权云 / 集团服务 / 控制台) | 创飞(本公司) |
|
||||
|------|----------------------------------------|----------------|
|
||||
| 授权模型 | 产品、模版、业务、SN、特征项、配置项、规则引擎 | 按产品线映射业务 SKU → 控制台配置;不在比特控制台外「再造一套许可模型」除非有自研 `selfhosted` |
|
||||
| 客户端运行时 | 官方 Bitanswer SDK(C/Java 等)、与产品绑定的库 | 集成 **craftlabs-authorization-sdk**(及随产品 native 库)、应用内调用与配置下发 |
|
||||
| 出站 HTTP(比特 → 创飞) | 规则动作 **Callback**:向创飞 URL POST JSON | 提供 **公网可达、可鉴权** 的 HTTPS 端点;解析 `event` / `data` 并驱动内部流程 |
|
||||
| 入站连接(创飞客户端 → 比特) | 云/E3 `https://…`、集团 `bit://…` 等 | 为每环境、每产品线配置正确 **`bitanswer.url`**;管理 SN、`applicationData`、证书与网络策略 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 创飞建议提供的「平台」形态(逻辑分层)
|
||||
|
||||
不必一开始做成单一巨石系统,但建议在架构上区分以下 **逻辑平台**,便于分工与演进。
|
||||
|
||||
### 2.1 授权集成与配置平台(对内 DevOps / 架构)
|
||||
|
||||
- **能力**:统一维护「产品线 ↔ 比特产品/模版/业务/特征 ID」映射;生成与校验 [`craftlabs-auth-config`](../schemas/craftlabs-auth-config.schema.json) 类配置;管理多环境 `bitanswer.url`、SN 样例与联调账号。
|
||||
- **交付形态**:可先从 **Git 仓库 + Schema CI 校验 + 文档** 起步,再演进为内部配置服务或门户。
|
||||
|
||||
### 2.2 许可事件与集成平台(对接规则 Callback)
|
||||
|
||||
- **能力**:接收比特控制台配置的 **规则 Callback**(异步 POST);校验 **`x-bitanswer-token`**(或双方约定头);按 `event` 类型路由到订单、资产、计费、通知等系统;**幂等**与**重试友好**(官方不依赖响应体)。
|
||||
- **交付形态**:独立 **BFF/API 网关后的 Webhook 服务**(建议与核心业务库解耦,用消息队列削峰)。
|
||||
|
||||
### 2.3 客户与订单主数据(CRM / ERP / 自研商务系统)
|
||||
|
||||
- **能力**:SN 与合同/订单/客户绑定;激活前校验(对应 `sn:pre_activate` 场景);激活后状态推进(对应 `sn:post_activate`)。
|
||||
- **说明**:可复用现有系统;若无,至少需 **最小订单-SN 台账** 才能用好规则回调。
|
||||
|
||||
### 2.4 设备与终端治理(可选但强烈建议)
|
||||
|
||||
- **能力**:存储 `mid`(设备指纹)与 SN、客户、场站关系;支持换机、终端数对账(对应 `device:pre_activate` / `post_activate`)。
|
||||
- **适用**:单机浮动、多终端限制、现场交付类产品(如码头、校园场景示例配置所暗示的部署形态)。
|
||||
|
||||
### 2.5 可观测性与支持
|
||||
|
||||
- **能力**:客户端授权失败日志脱敏上报;区分「网络 / SN 无效 / 特征未授权 / 集团满并发」等;与比特控制台告警协同。
|
||||
- **交付形态**:日志规范、仪表盘、客服查询 SN 状态的手册(只读控制台或内部工具)。
|
||||
|
||||
---
|
||||
|
||||
## 3. 具体交付软件与工件(建议清单)
|
||||
|
||||
下列项可与当前仓库及产品线对齐,按项目裁剪。
|
||||
|
||||
| 交付物 | 说明 | 与现有仓库关系 |
|
||||
|--------|------|----------------|
|
||||
| **craftlabs-authorization-sdk**(及绑定 native) | 统一 Java/Native 授权门面,`provider=bitanswer` 时消费 `bitanswer.url` 等 | 本仓库已有核心模块与示例配置 |
|
||||
| **产品线授权配置文件** | 每产品/场景的 JSON(含 `features.*.bitanswerFeatureId` 等) | 见 `examples/config/*.bitanswer.json` 模式 |
|
||||
| **规则 Callback 接收服务** | HTTPS 端点 + 鉴权 + 事件分发;可选管理后台查看原始 payload(脱敏) | **本仓库未包含**,需单独工程 |
|
||||
| **配置与安全交付流程** | SN、`applicationData`、环境 URL 的分发与轮换;禁止硬编码进镜像 | 流程 + 密钥管理(Vault/KMS/CI Secret) |
|
||||
| **集成与联调文档** | 环境矩阵、比特控制台截图级操作说明、错误码对照 | 可延续 `docs/bitanswer-*.md` 体系 |
|
||||
| **(选用)集团授权服务器侧运维** | 若使用 `bit://` 自建集团服务:高可用、备份、与比特版本兼容矩阵 | 与 `wharf.bitanswer.json` 类场景相关 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 应具备的能力清单(功能与非功能)
|
||||
|
||||
### 4.1 功能能力
|
||||
|
||||
| 能力域 | 应具备要点 |
|
||||
|--------|------------|
|
||||
| **运行时接入** | 能使用官方 SDK + 本 SDK 完成 Login、激活、特征项 Query/Release(集团场景成对释放)、心跳策略与产品识别码一致 |
|
||||
| **配置治理** | Schema 级校验、环境隔离、特征 ID 与逻辑功能键映射可追溯 |
|
||||
| **规则 Callback** | 支持文档所列事件的 JSON 解析;与订单/资产状态机衔接;可选拒绝或标记风险(视比特侧是否支持同步阻断,以官方为准) |
|
||||
| **会话与吊销联动** | 若使用云保保相关能力:能消费 `yunbaobao:session_logout` 或与客户端登出联动,避免「业务已关、许可仍显示占用」类体验问题 |
|
||||
| **多授权模式共存** | 云 / 集团 / 单机(含智能连接、强制认证)在架构上可区分部署与运维责任,避免混用 URL 与 loginMode |
|
||||
|
||||
### 4.2 非功能能力
|
||||
|
||||
| 能力域 | 应具备要点 |
|
||||
|--------|------------|
|
||||
| **安全** | Callback URL 仅 HTTPS;token 轮换;payload 脱敏日志;防重放与 IP 允许列表(若比特出口 IP 可约定) |
|
||||
| **可靠性** | Webhook 快速 `2xx`、内部异步处理;队列重试;死信与人工补偿 |
|
||||
| **合规与审计** | 激活、换机、会话失效留痕;满足客户与内部审计查询 |
|
||||
| **版本与兼容** | 比特 SDK 与集团服务版本矩阵;升级窗口与客户通知 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 与比特控制台的操作分工(落地检查表)
|
||||
|
||||
- **创飞运营/产品**:维护产品、模版、业务、特征项;配置规则与 **Callback URL**、**x-bitanswer-token**。
|
||||
- **创飞研发**:实现客户端集成、Webhook 服务、内部状态机与对账。
|
||||
- **创飞运维**:`bitanswer.url` 网络可达性、证书、集团服务(若自建)SLA。
|
||||
- **双方联调**:`sn:pre_activate` / `post_activate` 各至少一轮全链路;含异常 SN、重复激活、设备重激活。
|
||||
|
||||
---
|
||||
|
||||
## 6. 产品经理维度:分析与评估
|
||||
|
||||
### 6.1 平台定位与价值主张
|
||||
|
||||
将 **客户项目、合同、交付物与授权** 收口为一条可追溯的业务链,并与比特安索在 SN、激活、规则回调、功能开关等能力上打通。对内减少「合同已签但授权未配、交付与许可不一致、规则回调无人跟进」等断层;对外使 **交付可预期、授权可运营、问题可定位**,支撑多产品线、多客户的规模化商务与交付,而非仅依赖人工台账与零散工具。
|
||||
|
||||
### 6.2 目标用户与人设(内部)
|
||||
|
||||
| 人设 | 典型职责 | 与平台关系 |
|
||||
|------|----------|------------|
|
||||
| 商务 / 客户经理 | 商机、报价、合同推进、客户沟通 | 维护客户与项目主数据,触发交付与授权需求 |
|
||||
| 交付 / 实施 | 交付清单、环境、上线节奏 | 登记交付产品、核对交付与合同范围 |
|
||||
| 授权运营 / License Ops | SN 策略、激活规则、BitAnswer 配置与异常处理 | 配置授权、处理回调与规则事件、与 SDK/回调服务协同 |
|
||||
| 订单 / 运营支持(可与 CRM 合并) | 订单、SKU、开票与履约对齐 | 保证「卖什么」与「授什么」一致 |
|
||||
| 研发 / 平台工程 | SDK、Webhook 服务、可观测性 | 保障集成稳定、排障与版本演进 |
|
||||
| 管理层 / 财务合规 | 收入确认、审计、风险 | 审计轨迹与报表,非日常操作主用户 |
|
||||
|
||||
### 6.3 核心模块地图(与四大域 + 支撑域)
|
||||
|
||||
- **客户 / 项目**:客户档案、项目/阶段、干系人,与合同/交付关联。
|
||||
- **合同**:主数据、标的(产品/模块/席位数/期限)、状态(草稿→生效→变更→终止)。
|
||||
- **交付产品**:交付批次与清单、与合同行项/SKU 映射、交付完成标记。
|
||||
- **授权**:BitAnswer 集成配置、SN 分配与生命周期、激活记录、功能与产品配置对应(如 per-product JSON)、规则 Webhook 入站与处置状态。
|
||||
- **支撑(必要)**:集成与运维(回调地址、配置发布、Webhook 健康度);事件与规则编排(回调→业务动作/工单);设备/资产治理(可选);审计与合规;可观测性(激活与回调指标)。
|
||||
|
||||
### 6.4 关键用户旅程
|
||||
|
||||
1. **合同签订 → SN 分配 → 交付 → 激活**:合同生效后生成授权需求 → License Ops 完成(或同步)比特侧 SN/许可包 → 交付标记已交付 → 客户端经 SDK 激活 → 平台记录结果与原因码。
|
||||
2. **规则触发 → Webhook → 运营处置**:比特规则满足 → HTTPS 接收回调 → 落库并关联客户/合同/SN → 运营认领、续期/冻结/升级等,写回状态并通知。
|
||||
3. **合同变更 → 授权差异对齐**:变更后对比「合同授权视图」与当前比特/缓存状态 → 待办清单 → 批量调整并审计。
|
||||
4. **交付争议 / 对账举证**:拉取合同条款 + 交付记录 + SN 发放与激活时间线 + 回调摘要,一条链查到底。
|
||||
5. **新产品接入**:平台注册 SKU/功能矩阵 → 维护授权 JSON → 联调 SDK 与测试环境比特 → 上线检查清单(回调可达、监控就绪)→ 商务可报价签约。
|
||||
|
||||
### 6.5 MVP 与分阶段路线图(P0 / P1 / P2)
|
||||
|
||||
| 阶段 | 范围与理由 |
|
||||
|------|------------|
|
||||
| **P0(MVP)** | 客户/项目、合同、交付产品最小主数据与关联;SN 分配与激活结果回写;Webhook 入站 + 事件列表 + 与客户/合同/SN 的基础关联(挂不上先保留原始载荷);SDK 配置来源与环境区分。**理由**:先跑通主链与排障、审计雏形。 |
|
||||
| **P1** | 合同行项与授权/SKU 规则化映射、变更 diff;回调处置工作流(认领、状态机、通知);设备治理(若适用)与审计报表;可观测仪表盘。**理由**:降本增效、减人为错误。 |
|
||||
| **P2** | 与 CRM/订单深度同步、审批流、多法人;规则/策略可配置编排;到期续费与异常聚类等。**理由**:客户与产品线规模化后的必然需求。 |
|
||||
|
||||
### 6.6 成功指标(KPI)
|
||||
|
||||
- **产品**:主链覆盖率(新签合同在平台内完成合同→交付→授权记录);SN/激活/回调与客户或合同关联成功率;合同生效到「许可就绪」中位时长;配置模板复用率。
|
||||
- **运营**:回调队列处理 SLA、激活成功率与 Top 失败原因、合同与授权不一致类工单占比、关键字段变更可追溯比例(目标趋近 100%)。
|
||||
|
||||
### 6.7 风险与待决策问题(干系人澄清)
|
||||
|
||||
- 主数据权威(CRM/电子签/本平台)与冲突合并策略。
|
||||
- BitAnswer 控制台与平台内闭环的边界、是否双写及对账。
|
||||
- Webhook 安全(签名/幂等/重放)、SLA 与灾备是否与商务承诺一致。
|
||||
- 多产品 JSON 与客户端/SDK 发版节奏、最低 SDK 版本策略。
|
||||
- 日志与 PII 留存、数据跨境(若涉及)。
|
||||
- License Ops 编制与工单机制是否在 P0 明确。
|
||||
- 管理层优先指标:交付周期 vs 授权类客诉下降,影响功能取舍。
|
||||
|
||||
---
|
||||
|
||||
## 7. 技术架构维度:分析与评估
|
||||
|
||||
### 7.1 系统语境(Context)
|
||||
|
||||
| 参与者 | 角色 |
|
||||
|--------|------|
|
||||
| **客户商务与交付管理平台** | 客户、项目、合同、交付项、产品/SKU、SN/设备台账、授权策略与比特 ID 映射;**不提供** BitAnswer 运行时。 |
|
||||
| **比特安索** | 许可模型、规则、SN/设备生命周期;**出站 Callback** 至创飞 HTTPS。 |
|
||||
| **客户现场客户端** | **craftlabs-authorization-sdk**(`BitAnswerProvider` → native)+ JSON 配置(含 `bitanswer.url` 等)。 |
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph CF["创飞平台"]
|
||||
P["商务与交付域\n项目/合同/交付/SN"]
|
||||
I["授权集成层\n映射/配置/事件编排"]
|
||||
W["Webhook 接入\nCallback 接收"]
|
||||
end
|
||||
|
||||
subgraph BA["比特安索"]
|
||||
C["控制台 / 规则引擎"]
|
||||
CL["授权云 / 集团服务"]
|
||||
end
|
||||
|
||||
subgraph EDGE["客户现场"]
|
||||
APP["现场客户端\nSDK + Native"]
|
||||
end
|
||||
|
||||
P --> I
|
||||
W --> I
|
||||
I --> P
|
||||
|
||||
C -->|"规则 Callback\nHTTPS POST + Token"| W
|
||||
APP -->|"Login/激活/特征/心跳"| CL
|
||||
CL -.->|"策略与许可结果"| APP
|
||||
I -->|"配置与 SN 交付\n(流程+工件)"| EDGE
|
||||
```
|
||||
|
||||
**要点**:Callback 为 **比特 → 创飞**;客户端为 **现场 → 比特**;主数据与状态机在创飞平台闭环;**Webhook 须独立服务**(与本仓库 SDK 分离)。
|
||||
|
||||
### 7.2 逻辑架构:建议服务与模块
|
||||
|
||||
| 逻辑组件 | 职责 |
|
||||
|----------|------|
|
||||
| **商务与交付核心 API** | 客户、项目、合同、交付项、产品/SKU、SN/设备 CRUD 与状态机;为授权事件提供业务锚点。 |
|
||||
| **授权集成服务** | 产品线 ↔ 比特产品/模版/业务/特征 ID;`craftlabs-auth-config` 生成/校验;多环境 `bitanswer.url`。可先 Git + Schema CI,再演进配置 API。 |
|
||||
| **Webhook Ingress** | 公网 HTTPS、Token 鉴权、快速 `2xx`;置于网关/WAF 后;与核心库解耦,异步投递下游。 |
|
||||
| **事件与工作流编排** | 按 `event` 路由;幂等键;补偿与工单;建议 MQ + DLQ。 |
|
||||
| **配置与密钥分发** | 脱敏配置模板、环境参数、轮换策略进入发布流水线或配置中心;禁止密钥进镜像。 |
|
||||
| **可观测与支持** | trace、脱敏审计日志、客户端错误分类上报。 |
|
||||
|
||||
### 7.3 数据域模型(高层)
|
||||
|
||||
```text
|
||||
客户 ──* 项目
|
||||
客户 ──* 合同
|
||||
|
||||
合同 ──* 交付项
|
||||
交付项 *──* 产品/SKU
|
||||
|
||||
产品/SKU ──* 授权策略映射(比特 product/template/business/featureIds、策略版本、环境)
|
||||
|
||||
合同/交付项 ──* SN
|
||||
SN *──* 设备(mid、换机历史)
|
||||
|
||||
授权事件流水(Callback + 可选客户端上报摘要)── 关联 SN、设备、合同/交付项、event、幂等键、处理状态
|
||||
```
|
||||
|
||||
**要点**:SN 是连接比特控制台与创飞商务数据的键;`LicensePolicyMapping` 将销售 SKU 映射为比特特征与规则;设备域对齐 `device:*` 类事件。
|
||||
|
||||
### 7.4 集成模式摘要
|
||||
|
||||
- **规则 Callback**:Ingress 尽快 `2xx`;校验 `x-bitanswer-token` 并支持轮换;幂等键与乱序容忍(按状态机合法性判定)。
|
||||
- **边缘配置**:符合 Schema 的 JSON、环境 `bitanswer.url`;SN 与 `applicationData` 经安全通道交付,与镜像构建分离。
|
||||
- **密钥**:KMS/Secret Manager;日志脱敏(token 不落库、不落日志)。
|
||||
|
||||
### 7.5 非功能需求(NFR)与技术风险
|
||||
|
||||
**NFR**:HTTPS 全链路、WAF/限流、Webhook 多实例无状态、队列多 AZ、RTO/RPO 与降级;结构化日志与按 `event` 的指标;比特 SDK/集团服务 **兼容矩阵** 与发版联动。
|
||||
|
||||
**风险与缓解**:Callback 洪峰 → MQ 与限流;幂等缺失 → 唯一约束/幂等表;SN 与合同不一致 → `sn:pre_activate` 校验 + 对账任务;SDK 升级破坏现场 → 预发演练与灰度、保留稳定 native 包。
|
||||
|
||||
### 7.6 分阶段技术交付(与 PM 阶段对齐)
|
||||
|
||||
| PM 阶段 | 技术验收要点 |
|
||||
|---------|----------------|
|
||||
| 需求与方案 | 语境图与逻辑架构评审;数据域 v1;事件清单与幂等策略;安全与密钥方案。 |
|
||||
| 设计 | API/事件契约;Ingress 与队列拓扑;`LicensePolicyMapping` 模型与 Schema 对齐。 |
|
||||
| 迭代 1(MVP) | 联调环境 SDK 跑通;Webhook 最小实现(鉴权 + 入队 + 2xx);至少一类核心事件(如 `sn:post_activate`)打通台账。 |
|
||||
| 迭代 2 | 设备域与 `device:*`;`pre_activate` 风控;DLQ 与补偿;配置 CI 校验。 |
|
||||
| UAT / 上线 | 全事件抽样、异常与换机场景;监控告警;token 轮换与回滚手册。 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 前端与后端实现维度:Spring Boot 4.0.\* + Vue 分阶段开发评估
|
||||
|
||||
### 8.1 技术栈与版本假设
|
||||
|
||||
| 层级 | 选型 | 说明 |
|
||||
|------|------|------|
|
||||
| 后端 | Java + **Spring Boot 4.0.\*** | **主版本线锁定 4.0**,采用官方 **4.0.x** 补丁(GA,非里程碑);**Jakarta** 命名空间;**Java 基线以 Boot 4 官方 System Requirements 为准**(当前一代为 **Java 17+**,生产 JDK 建议与团队统一为 **LTS,如 21**)。**选型理由**:4.0 线为后续 **AI 能力扩展**(Spring AI、工具调用、向量检索与观测组件等)预留同代生态位,避免在 3.x 与 4.x 之间二次迁移。 |
|
||||
| 前端 | **Vue 3**(Composition API)+ **Vite** | Vue 3.x + Vite 稳定版;**锁版本**(lockfile)避免构建漂移。 |
|
||||
|
||||
**AI 扩展(规划约束,非 MVP 必做)**:在 Spring Boot **4.0.\*** 上按需引入 **Spring AI**(或官方推荐组合)、统一 **Observability**(Micrometer / OTel)与 **API 契约**(springdoc),使对话、RAG、MCP/工具类集成与现有 REST、安全、配置模型一致;具体模块与版本在立项时按 Spring 官方 BOM 与兼容性矩阵选定。
|
||||
|
||||
### 8.2 三档总览(最小版 → 完整版)
|
||||
|
||||
| 档位 | 业务目标(一句话) | 前端重心 | 后端重心 | 风险量级 |
|
||||
|------|-------------------|----------|----------|----------|
|
||||
| **MVP** | 内部可用:主数据 + 合同/交付最小闭环 + 许可可查 + Callback 不断链 | 少页面、列表+表单、基础鉴权 | 粗粒度模块、REST 为主、Webhook 打通一条链、基础审计 | 中 |
|
||||
| **Mid** | 流程与协作:状态机、报表雏形、异步与队列可观测 | 复杂表格/表单、按钮级权限、简单仪表盘 | Ingress 与 Worker 分离趋势、Outbox/MQ、幂等固化、OpenAPI 稳定 | 中高 |
|
||||
| **Full** | 可运营、可审计、可扩展:治理、对账、多集成 | i18n/a11y、高级报表、动态权限/租户 | 限界上下文清晰、读模型/报表分离、SLO、审计独立管道 | 高 |
|
||||
|
||||
### 8.3 MVP(最小版本)
|
||||
|
||||
**目标**:客户/项目、合同、交付项 CRUD;SN 录入/绑定;Webhook 接收 → 校验 → 入队或直写 + **幂等**;关键写操作审计。
|
||||
|
||||
**前端(Vue)**:布局 + 客户/项目/合同/交付/SN 列表与详情编辑;Callback 投递记录只读页;Pinia + 路由守卫 + axios 封装;表格分页排序;可选导出 CSV;少量单测 + 1~2 条 E2E。
|
||||
|
||||
**后端(Spring)**:分包域:`identity`、`customer-project`、`contract`、`delivery`、`licensing`、`webhook-ingest`、`audit`;REST `/api/v1/...`;**Spring Security**(JWT 或 Session)+ 粗角色;**PostgreSQL 15** + **MyBatis-Plus** + Flyway/Liquibase;Webhook **inbox 或 MQ**;幂等键 `(source, message_id)` 或 `event_id`;**springdoc-openapi**;Micrometer + 结构化日志 + `/actuator/health`。
|
||||
|
||||
**前后端依赖**:认证契约、分页/错误码、许可与合同关联模型、Webhook **schemaVersion** 约定。
|
||||
|
||||
**本档风险**:比特字段枚举与内部模型不一致;Webhook ACK 与落库事务边界;权限过粗导致 Mid 期大改。
|
||||
|
||||
**工作量(定性)**:**M~L**(联调与 Webhook 占大头)。
|
||||
|
||||
### 8.4 Mid(增强版)
|
||||
|
||||
**目标**:合同/交付状态机与操作轨迹;许可映射与批量 SN;**MQ 为主路径**;失败重试与 Ops 入口;基础监控指标。
|
||||
|
||||
**前端**:状态时间轴;Webhook 失败列表与详情(脱敏);映射配置页;简单 KPI 卡片;可编辑表格、动态表单;**按钮级权限**;ECharts 可选;OpenAPI 客户端进 CI;`Idempotency-Key` 与后端对齐。
|
||||
|
||||
**后端**:Ingress **独立部署** 倾向;**Outbox** + DLQ;**@PreAuthorize** 细粒度;乐观锁;领域事件;**OpenAPI v1 冻结**;分布式 Trace + 业务指标(Webhook lag、激活成功率)。
|
||||
|
||||
**风险**:异步与 UI「已受理」反馈不一致;报表与 OLTP 同库压力;映射与比特控制台不同步。
|
||||
|
||||
**工作量(定性)**:**L**。
|
||||
|
||||
### 8.5 Full(完整版)
|
||||
|
||||
**目标**:数据范围/多租户(若需要)、审计与合规导出、SLA 看板、对账与异常工单、配置模板化、BitAnswer 全生命周期与对账任务。
|
||||
|
||||
**前端**:模板/字典/集成配置后台;多维报表与订阅;审计检索;任务中心(长耗时对账);字段级权限与动态路由;虚拟滚动 + 游标分页;i18n 与 WCAG 目标;契约测试与性能脚本。
|
||||
|
||||
**后端**:模块化单体或拆服务;**CQRS 轻量**读模型;OAuth2/OIDC/SSO;ABAC/数据范围;读写分离或报表库;事件版本化与回放;OpenAPI 多受众与兼容 CI;SLO 与审计独立存储。
|
||||
|
||||
**风险**:拆分过早/过晚;审计写放大;业务规则与比特长期分叉(需防腐层与定期对齐)。
|
||||
|
||||
**工作量(定性)**:**L~XL**。
|
||||
|
||||
### 8.6 横切能力递进
|
||||
|
||||
| 能力 | MVP | Mid | Full |
|
||||
|------|-----|-----|------|
|
||||
| OpenAPI | 开发态 | CI + v1 冻结 | 多受众 + 兼容检查 |
|
||||
| 安全 | JWT/Session + 粗角色 | 细权限 + ingress 加固 | SSO + 数据范围 + 密钥轮换 |
|
||||
| 异步 | 可选 MQ | Outbox + DLQ | 事件版本 + 回放 |
|
||||
| 观测 | 日志 + health | Metrics + Trace | SLO + 审计管道 |
|
||||
| 测试 | 手工为主 | E2E + 核心单测 | 契约 + 性能 + a11y |
|
||||
|
||||
---
|
||||
|
||||
## 9. 产品使用维度:MVP / Mid / Full 分阶段评估
|
||||
|
||||
> 本节从 **谁在用、要完成什么、界面呈现什么事实、如何运营** 描述,不展开 Spring/Vue 实现细节(见 §8)。
|
||||
|
||||
### 9.1 三档定位
|
||||
|
||||
| 档位 | 一句话目标 |
|
||||
|------|------------|
|
||||
| **MVP** | **卖—授—激活** 闭环可追溯,Callback 不丢,SN 可关联合同 |
|
||||
| **Mid** | 规模化:**设备/换机、队列与补偿、对账与报表、通知** |
|
||||
| **Full** | **变更治理、财务/审计级追溯、深度集成** 与多模式许可运营 |
|
||||
|
||||
### 9.2 MVP
|
||||
|
||||
**角色与任务**:商务建客户/项目/合同;交付登记交付物;License Ops 管 SN 与激活核对;订单支持维护合同行与 SKU 对应;研发保障 Callback 可查。
|
||||
|
||||
**必备界面**:客户档案;项目工作台;合同台账;合同行/订单行;交付登记;**SN/授权台账**;**Callback 收件箱**;比特侧状态摘要(只读/链接,不替代控制台)。
|
||||
|
||||
**用户要看到的「事实」**:客户与项目;合同标的;交付是否完成;SN 绑谁、状态;Callback 是否到达与处理结果;**客户→项目→合同→交付→SN** 端到端链路。
|
||||
|
||||
**运营流**:Callback 入站落库与状态更新或待办;SN 发放与激活核对;失败可重试或人工跟进。
|
||||
|
||||
**不做**:完整 CRM/电子签、精细设备治理、财务闭环、替代比特控制台全能力、客户自助门户。
|
||||
|
||||
**验收**:一条真实或模拟链路跑通;合法 Callback 100% 可检索;SN 可追溯到合同;权限与审计字段满足;无「孤儿 SN」至少可警告/筛选。
|
||||
|
||||
**依赖**:License Ops、比特控制台规则与 token、现场交付节点、研发 Callback 端点。
|
||||
|
||||
### 9.3 Mid
|
||||
|
||||
**增量角色与任务**:交付管设备/场站与换机;Ops 队列 SLA 与批量 SN;客服按 SN 诊断;管理层看健康度。
|
||||
|
||||
**增量界面**:设备台账;换机/重激活;Callback 运营台(过滤、批量处理、死信);**对账视图**(标的 vs 已发 vs 已激活);待办/通知;产品线与环境映射只读或受控编辑。
|
||||
|
||||
**增量事实**:多设备历史;Callback 耗时与 TOP 原因;履约缺口;即将到期列表。
|
||||
|
||||
**不做**:完整 ERP 收入确认、全功能客户自助、经销商分润、自建对等规则引擎。
|
||||
|
||||
**验收**:换机场景台账完整;对账抽样一致;峰值 Callback 不丢;至少一类通知通道可测。
|
||||
|
||||
### 9.4 Full
|
||||
|
||||
**增量重点**:财务/合规审计与导出;管理层经营视图;产品/架构的变更与版本治理。
|
||||
|
||||
**增量界面**:合同变更与版本;授权策略库(映射版本、生效区间);客户健康度/续费;审计导出;可选客户只读门户;CRM/ERP 同步状态。
|
||||
|
||||
**验收**:变更闭环 T+X 与控制台一致;审计抽样可追溯;集成成功率与失败清单可处理。
|
||||
|
||||
### 9.5 与 P0 / P1 / P2 路线对齐
|
||||
|
||||
| 路线 | 含义 | 与本三档 |
|
||||
|------|------|----------|
|
||||
| **P0** | 能接单、交付、授权,Callback 不断链 | ≈ **MVP** 主体 |
|
||||
| **P1** | 运营效率:队列、对账、设备、通知 | ≈ **Mid** |
|
||||
| **P2** | 治理与增长:变更、经营分析、深度集成 | ≈ **Full** |
|
||||
|
||||
P0/P1/P2 为**优先级语言**;MVP/Mid/Full 为**产品包边界**;排期可交错,但**验收边界**建议按档固化,避免 MVP 膨胀。
|
||||
|
||||
---
|
||||
|
||||
## 10. 修订记录
|
||||
|
||||
| 日期 | 说明 |
|
||||
|------|------|
|
||||
| 2026-04-06 | 初版:基于工作区走查与比特文档推导创飞侧平台与交付物。 |
|
||||
| 2026-04-06 | 增补:平台正式命名;§6 产品维度、§7 技术架构双 Task 分析并入本文。 |
|
||||
| 2026-04-06 | 增补:§8 前端+后端(Spring Boot GA + Vue 3 + Vite)分档;§9 产品使用分档;与 P0–P2 对齐说明。 |
|
||||
| 2026-04-06 | §8 后端基线明确为 **Spring Boot 4.0.\*** 长期线,并补充与 **AI 扩展**(Spring AI 等)同代演进说明。 |
|
||||
@@ -0,0 +1,359 @@
|
||||
# 客户商务与交付管理平台 — 业务流程设计与版本迭代排期
|
||||
|
||||
> **文档角色**:资深产品经理视角的 **全业务 BPM 走查**、**版本迭代计划** 与 **排期框架**(可与研发 Sprint 对齐后填入具体日历)。
|
||||
> **计划基准日**:2026-04-06(相对排期以 **T0** 表示立项/开工周)。
|
||||
> **关联文档**:[功能模块与功能点](chuangfei-platform-product-modules.md) · [平台与比特对接总览](chuangfei-bitanswer-integration-platform.md) · [回调与地址评估](bitanswer-callbacks-endpoints-assessment.md) · [授权制度与规则](bitanswer-licensing-design-and-rules.md) · [工作区工程划分](engineering/WORKSPACE_ENGINEERING_LAYOUT.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. 工作区文档走查结论(摘要)
|
||||
|
||||
|
||||
| 文档 | 已覆盖内容 | 本文补足内容 |
|
||||
| -------------------------------------------------- | ----------------------------------------------------- | -------------------------------------- |
|
||||
| `chuangfei-platform-product-modules.md` | M1–M11 模块、功能点 ID、P0/P1/P2、角色权限矩阵 | **跨模块泳道流程**、**状态机与异常分支**、**发布列车与周次排期** |
|
||||
| `chuangfei-bitanswer-integration-platform.md` | 对接边界、技术架构、Spring Boot 4.0. + Vue 分档、产品使用 MVP/Mid/Full | 将上述档位 **映射为可发布版本号与迭代切片** |
|
||||
| `bitanswer-licensing-design-and-rules.md` | 产品/模版/业务/授权、特征项、规则 Callback 事件 | Callback 在 BPM 中的 **触发点与系统边界** |
|
||||
| `bitanswer-callbacks-endpoints-assessment.md` | URL 类型、Webhook 与 SDK 分工 | 在排期中固定 **Webhook 工程与联调节点** |
|
||||
| `craftlabs-auth-config` Schema / `examples/config` | 客户端配置形态 | 在 **BP-10** 与 **V1.0** 中体现配置发布依赖 |
|
||||
|
||||
|
||||
**排期假设(可调整)**:每迭代 **2 周**;团队为 **1 个全栈小队**(可并行时压缩总周数);**UAT 每大版本末预留 1 迭代**。
|
||||
|
||||
---
|
||||
|
||||
## 2. 业务流程总览索引
|
||||
|
||||
|
||||
| 流程编号 | 流程名称 | 主价值 | 涉及模块 | 主责角色 |
|
||||
| --------- | ------------------- | ---------- | ----------- | ----------- |
|
||||
| **BP-01** | 客户与项目准入 | 主数据干净、可挂合同 | M1、M11 | 商务、管理员 |
|
||||
| **BP-02** | 合同起草、审批与生效 | 「卖什么」入台账 | M2、M10 | 商务、订单支持 |
|
||||
| **BP-03** | 交付计划与交付完成 | 「可激活」前置 | M3、M2 | 交付 |
|
||||
| **BP-04** | 授权需求与 SN 发放 | 合同→许可载体 | M4、M2、M3、M6 | License Ops |
|
||||
| **BP-05** | 现场激活与状态回写 | 闭环到台账 | M4、比特、现场客户端 | 交付、Ops |
|
||||
| **BP-06** | 许可事件(Callback)入站与处置 | 不断链、可审计 | M5、M4、M8 | Ops、研发支撑 |
|
||||
| **BP-07** | 合同变更与授权差异对齐 | 卖授一致 | M2、M4、M6、M9 | 商务、Ops |
|
||||
| **BP-08** | 设备登记、换机与重激活 | 终端合规 | M7、M5、M4 | 交付、Ops |
|
||||
| **BP-09** | 对账、异常工单与举证 | 管理降险 | M9、M8、M10 | 管理层、财务、合规 |
|
||||
| **BP-10** | 授权集成配置发布 | 客户端可连比特 | M6、研发 | 架构、Ops |
|
||||
| **BP-11** | 账户开通、登录与权限变更 | 安全访问 | M11、M10 | 管理员、安全 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. 业务流程设计(详述)
|
||||
|
||||
### 3.1 BP-01 客户与项目准入
|
||||
|
||||
**目标**:任何合同必须挂在已存在且已校验的客户/项目下。
|
||||
|
||||
**步骤**:① 管理员维护字典(行业、区域等)→ ② 商务创建客户档案(必填项校验)→ ③ 创建项目并关联客户、干系人 → ④(可选)客户/项目冻结策略生效。
|
||||
|
||||
**输出物**:客户 ID、项目 ID;审计记录(M10-F01)。
|
||||
|
||||
**异常**:重复客户 → P2 合并流程(M1-F08);权限不足 → M11 拦截。
|
||||
|
||||
---
|
||||
|
||||
### 3.2 BP-02 合同起草、审批与生效
|
||||
|
||||
**目标**:合同状态合法迁移,行项可支撑后续交付与 SN 绑定。
|
||||
|
||||
**状态机(逻辑)**:`草稿` → `待生效` → `生效`;`生效` → `变更中` → `生效(新版本)`;`生效` → `终止/到期`。
|
||||
|
||||
**步骤**:① 选客户与项目 → ② 录入合同头与 **合同行项**(SKU/数量/期限)→ ③(P1)附件上传 → ④ 商务/订单支持核对订单号关联(M2-F06)→ ⑤ 状态置为生效。
|
||||
|
||||
**输出物**:合同 ID、行项 ID;变更时版本号(M2-F07)。
|
||||
|
||||
**异常**:行项为空或金额/数量口径冲突 → 阻断生效;越权编辑 → 审计告警。
|
||||
|
||||
---
|
||||
|
||||
### 3.3 BP-03 交付计划与交付完成
|
||||
|
||||
**目标**:交付批次与清单与 **合同行** 对齐,标记「已交付」作为 SN 发放门禁(可配置)。
|
||||
|
||||
**步骤**:① 基于项目/合同创建交付批次 → ② 维护交付清单(产品实例、环境说明 P1)→ ③ 关联合同行项 → ④ 交付工程师确认完成(M3-F05)→ ⑤ 状态变为已交付。
|
||||
|
||||
**输出物**:交付批次 ID、完成时间。
|
||||
|
||||
**异常**:未关联合同行的交付项 → 警告或阻断(系统参数 M11-F20)。
|
||||
|
||||
---
|
||||
|
||||
### 3.4 BP-04 授权需求与 SN 发放
|
||||
|
||||
**目标**:从「生效合同 +(建议)已交付」生成许可需求,SN 绑定合同行/项目/客户。
|
||||
|
||||
**步骤**:① License Ops 查看授权需求清单(M4-F08,可与合同行汇总)→ ② 在比特控制台完成 SN/许可包操作(系统外)→ ③ 平台 **录入或导入 SN**(M4-F01)→ ④ **绑定** 合同行与客户/项目(M4-F02)→ ⑤ 状态:已发放 → 通知客户/交付(可手工,Mid 接 M8)。
|
||||
|
||||
**输出物**:SN 记录、绑定关系、发放时间。
|
||||
|
||||
**异常**:孤儿 SN(无绑定)→ 警告列表;与合同数量超额 → 规则校验(P1 增强)。
|
||||
|
||||
---
|
||||
|
||||
### 3.5 BP-05 现场激活与状态回写
|
||||
|
||||
**目标**:客户端经 **craftlabs-authorization-sdk** 与比特交互后,平台侧可见激活结果。
|
||||
|
||||
**步骤**:① 交付将 SN 与环境说明交付客户 → ② 现场部署并配置 `bitanswer.url` 等(BP-10 已发布配置)→ ③ 客户端激活 → ④ Ops **回写** 激活成功/失败及原因码(M4-F05)或接口同步(若建设)→ ⑤ 更新 SN 状态。
|
||||
|
||||
**输出物**:激活时间、状态、备注。
|
||||
|
||||
**异常**:长期未激活 → Mid 纳入报表 M9-F02;失败原因字典维护(M11-F19)。
|
||||
|
||||
---
|
||||
|
||||
### 3.6 BP-06 许可事件(Callback)入站与处置
|
||||
|
||||
**目标**:比特规则触发后 **HTTPS Callback** 不丢、可关联、可关闭。
|
||||
|
||||
**步骤**:① Webhook Ingress 验签/token → 快速 2xx → ② 落库事件(M5-F01~F04)→ ③ 解析 `sn` 尝试关联 SN/合同 → ④ Ops 处置(认领、备注、更新业务状态或建待办 M8)→ ⑤ 失败进重试/DLQ(Mid)。
|
||||
|
||||
**事件类型对齐**(参见 [bitanswer-licensing-design-and-rules.md](./bitanswer-licensing-design-and-rules.md)):`sn:pre_activate` / `post_activate`、`device:pre_activate` / `post_activate`、`yunbaobao:session_logout` 等。
|
||||
|
||||
**异常**:无法解析关联 → 人工挂接;重复投递 → 幂等不重复改状态。
|
||||
|
||||
---
|
||||
|
||||
### 3.7 BP-07 合同变更与授权差异对齐
|
||||
|
||||
**目标**:合同变更后,**应授 vs 实授** 可对比、可出待办。
|
||||
|
||||
**步骤**:① 发起合同变更(M2-F07)→ ② 系统生成 **授权差异提示**(行项增减/延期)→ ③ Ops 在比特控制台调整并更新平台 SN/状态 → ④ 关闭变更单。
|
||||
|
||||
**输出物**:变更版本、操作记录(M10)。
|
||||
|
||||
**依赖**:Mid 报表 M9、映射 M2-F08 / M6。
|
||||
|
||||
---
|
||||
|
||||
### 3.8 BP-08 设备登记、换机与重激活
|
||||
|
||||
**目标**:`mid` 与 SN 关系清晰,换机与 `device:`* Callback 一致。
|
||||
|
||||
**步骤(Mid+)**:① 登记设备(M7-F01)→ ② 绑定 SN 历史(M7-F02)→ ③ 换机申请与记录(M7-F03)→ ④ 重激活后 Callback 更新台账。
|
||||
|
||||
**异常**:终端数超限 → 提示对齐比特策略(不替代控制台规则)。
|
||||
|
||||
---
|
||||
|
||||
### 3.9 BP-09 对账、异常工单与举证
|
||||
|
||||
**目标**:管理层/财务/合规可拉通 **合同—交付—SN—激活—Callback**。
|
||||
|
||||
**步骤(Mid+)**:① 打开对账视图(M9-F01~F03)→ ② 导出(权限控制 M9-F04)→ ③ 异常项生成待办(M8)→ ④ 合规按 M10 导出审计包(Full)。
|
||||
|
||||
---
|
||||
|
||||
### 3.10 BP-10 授权集成配置发布
|
||||
|
||||
**目标**:产品线、环境、`bitanswer.url`、特征映射与 JSON 模板 **版本化发布** 到现场可安装包或配置中心。
|
||||
|
||||
**步骤**:① M6 维护映射与模板 → ② Schema 校验(可与 CI 联动)→ ③ 发布记录(M6-F06)→ ④ 随产品发版或运维下发。
|
||||
|
||||
**依赖**:本仓库 `[schemas/craftlabs-auth-config.schema.json](../schemas/craftlabs-auth-config.schema.json)`。
|
||||
|
||||
---
|
||||
|
||||
### 3.11 BP-11 账户开通、登录与权限变更
|
||||
|
||||
**目标**:最小权限、会话可追溯、敏感操作可审计。
|
||||
|
||||
**步骤**:① 管理员创建用户并分配角色(M11-F14~F16)→ ② 用户登录/改密/登出(§12.1)→ ③ 角色变更写 M10/M11-F21。
|
||||
|
||||
**异常**:暴力破解 → 锁定(M11-F05);人员离职 → 禁用与会话失效(M11-F12)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 端到端泳道流程(主链路)
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph SALES[商务 / 订单支持]
|
||||
A1[BP-01 客户/项目]
|
||||
A2[BP-02 合同与行项]
|
||||
end
|
||||
|
||||
subgraph DEL[交付]
|
||||
B1[BP-03 交付完成]
|
||||
end
|
||||
|
||||
subgraph OPS[License Ops]
|
||||
C1[BP-04 SN 发放与绑定]
|
||||
C2[BP-06 Callback 处置]
|
||||
C3[BP-05 激活回写]
|
||||
end
|
||||
|
||||
subgraph DEVOPS[架构 / 研发]
|
||||
D1[BP-10 配置发布]
|
||||
D2[Webhook 服务运维]
|
||||
end
|
||||
|
||||
subgraph EDGE[客户现场 + 比特]
|
||||
E1[客户端 SDK 激活]
|
||||
E2[比特控制台 / 规则]
|
||||
end
|
||||
|
||||
A1 --> A2 --> B1 --> C1
|
||||
D1 --> E1
|
||||
C1 --> E1
|
||||
E1 --> E2
|
||||
E2 -->|Callback| C2
|
||||
C2 --> C3
|
||||
B1 -.->|门禁| C1
|
||||
```
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 5. 关键状态机汇总(产品规则)
|
||||
|
||||
|
||||
| 对象 | 状态(节选) | 允许迁移(示例) |
|
||||
| ----------- | ------------------------- | ----------------------- |
|
||||
| 合同 | 草稿 / 待生效 / 生效 / 变更中 / 终止 | 草稿→待生效→生效;生效→变更中→生效(新版) |
|
||||
| 交付批次 | 未交付 / 部分 / 已交付 | 未交付→已交付(或经部分) |
|
||||
| SN | 未发放 / 已发放 / 已激活 / 冻结 / 异常 | 未发放→已发放→已激活;任意→冻结(授权) |
|
||||
| Callback 事件 | 待处理 / 已处理 / 失败 / 忽略 | 待处理→已处理或失败→(重试)已处理 |
|
||||
| 用户账号 | 启用 / 禁用 | 启用↔禁用;禁用强制会话失效 |
|
||||
|
||||
|
||||
详细字段级规则在 PRD/配置表(M11-F20)中展开。
|
||||
|
||||
---
|
||||
|
||||
## 6. 版本迭代总体规划(Roadmap)
|
||||
|
||||
|
||||
| 版本 | 定位 | 对应产品包 | 目标上线(相对 T0) | 核心验收 |
|
||||
| -------- | ------- | ------ | ---------------- | ---------------------------- |
|
||||
| **V1.0** | MVP 可投产 | MVP | **T0 + 10~12 周** | 主链路 BP-01~06、11 + 一条真实项目 UAT |
|
||||
| **V1.1** | MVP 加固 | MVP+ | T0 + 14~16 周 | 性能、权限细项、生产监控 |
|
||||
| **V1.5** | Mid 第一波 | Mid 核心 | T0 + 18~22 周 | M7、M8、M9 主干 + BP-08 雏形 |
|
||||
| **V1.6** | Mid 完成 | Mid | T0 + 24~28 周 | 对账报表、Callback 运营台、SSO |
|
||||
| **V2.0** | Full 基线 | Full | T0 + 34~42 周 | 变更治理、审计导出、MFA/数据范围等 P2 |
|
||||
|
||||
|
||||
**说明**:若 **双迭代并行**(后端 Webhook 与业务 API 分队),V1.0 可压至 **8~10 周**,但需明确接口契约负责人。
|
||||
|
||||
---
|
||||
|
||||
## 7. 分迭代排期(Release Backlog)
|
||||
|
||||
> **三轨并行执行包**(后端双 JAR + 前端 Vue + 本仓 SDK):见 [engineering/PARALLEL_ITERATION_INDEX.md](./engineering/PARALLEL_ITERATION_INDEX.md) 与 [tracks/01](./engineering/tracks/01-backend-platform-webhook.md)、[02](./engineering/tracks/02-frontend-platform-ui.md)、[03](./engineering/tracks/03-client-sdk.md)。
|
||||
|
||||
### 7.1 V1.0 MVP(建议 5~6 个迭代 × 2 周)
|
||||
|
||||
|
||||
| 迭代 | 周期(相对) | 目标产出 | 覆盖流程/模块 |
|
||||
| ------ | --------- | ------------------------------------------------ | ----------------------- |
|
||||
| **I1** | T0~T0+2W | 工程脚手架、CI、环境;M11 登录/登出/会话/审计登录;用户角色粗矩阵 | BP-11 |
|
||||
| **I2** | +2W~+4W | M1 客户/项目全 P0;M11 字典、用户角色分配 | BP-01 |
|
||||
| **I3** | +4W~+6W | M2 合同与行项 P0 + 状态机;M10-F01 | BP-02 |
|
||||
| **I4** | +6W~+8W | M3 交付 P0;M4 SN P0(录入/绑定/状态/回写) | BP-03、BP-04、BP-05(手工回写) |
|
||||
| **I5** | +8W~+10W | M5 Callback 收件箱 P0;M6 环境与产品线 P0;**Webhook 服务联调** | BP-06、BP-10 最小 |
|
||||
| **I6** | +10W~+12W | E2E 缺陷收敛;**UAT**;操作手册 v1;生产配置检查清单 | BP-01~06、11 全链路 |
|
||||
|
||||
|
||||
**V1.0 必须验收用例**:任选 1 条真实或准生产项目,完成 **客户→合同→交付→SN→(模拟)激活→Callback 可见→台账一致**。
|
||||
|
||||
---
|
||||
|
||||
### 7.2 V1.1 加固(建议 2 迭代)
|
||||
|
||||
|
||||
| 迭代 | 目标 |
|
||||
| ------ | --------------------------- |
|
||||
| **I7** | 权限码拆到按钮级;导出与脱敏;接口限流与安全头 |
|
||||
| **I8** | 生产观测仪表盘;备份恢复演练;SN/合同批量导入稳定性 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 7.3 V1.5~V1.6 Mid(建议 4~5 迭代)
|
||||
|
||||
|
||||
| 迭代 | 目标产出 | 覆盖 |
|
||||
| ----------- | -------------------------------------- | ----------------- |
|
||||
| **I9** | M7 设备与换机 P1;M5 失败标注与重试入口 | BP-08 |
|
||||
| **I10** | M8 待办 + 一种通知通道 | BP-06、BP-09 |
|
||||
| **I11** | M9 对账与 Callback 统计 + 导出 | BP-09 |
|
||||
| **I12** | M11 SSO、并发会话、强制下线、密码重置;M2/M4/M6 P1 增强项 | BP-02、BP-04、BP-10 |
|
||||
| **I13(可选)** | M2 变更版本与差异提示;UAT Mid | BP-07 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 7.4 V2.0 Full(建议 5~7 迭代)
|
||||
|
||||
|
||||
| 主题 | 包含功能域 |
|
||||
| ------ | ----------------------------------- |
|
||||
| 合规与审计 | M10-F03/F04;举证包;留存策略 |
|
||||
| 安全 | M11 MFA、SECURITY_ADMIN、数据范围 M11-F17 |
|
||||
| 集成与规模化 | M1 CRM 同步 P2;M6 影响分析;M9 订阅与经营看板 |
|
||||
| 体验 | M8 模板与静默规则;可选客户只读门户(单独立项时移出) |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 8. 功能点 × 版本映射矩阵(摘要)
|
||||
|
||||
> 完整清单见 [chuangfei-platform-product-modules.md](./chuangfei-platform-product-modules.md) 各表 **优先级** 列;下表按 **版本** 聚合。
|
||||
|
||||
|
||||
| 版本 | P0 全量 | P1 主要增量 | P2 主要增量 |
|
||||
| ------------- | --------------------------------------------------- | ------------------------------ | ----------------------------- |
|
||||
| **V1.0** | 各模块标注 P0 的功能点 + M11 §12.1 F01~F07、§12.2 F14~F16、F19 | 不强制 | 不含 |
|
||||
| **V1.1** | — | 稳定性与权限细化、批量导入 | — |
|
||||
| **V1.5~V1.6** | — | 全部模块 P1 为主(M7、M8、M9、M11 SSO 等) | 少量 P2 可提前(按商务压力) |
|
||||
| **V2.0** | — | 收尾 Mid 缺口 | P2:MFA、安全管理员、数据范围、CRM、M10 导出等 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 9. 里程碑与依赖
|
||||
|
||||
|
||||
| 里程碑 | 时间点(相对) | 依赖 |
|
||||
| ------------------ | --------- | -------------------------- |
|
||||
| M0 立项与范围冻结 | T0 | 本 Roadmap + 模块文档签字 |
|
||||
| M1 α:可登录 + 主数据 | T0+4W | 身份设计、测试环境 |
|
||||
| M2 β:合同+交付+SN | T0+8W | 法务字段定稿 |
|
||||
| M3 γ:Callback 联调通过 | T0+10W | **比特控制台规则 URL**、公网 Ingress |
|
||||
| M4 UAT 完成 | T0+12W | 种子用户、脱敏数据 |
|
||||
| M5 生产首上 | T0+12~14W | 运维 SLA、密钥 KMS |
|
||||
| Mid GA | T0+24~28W | SSO IdP、通知渠道账号 |
|
||||
| Full GA | T0+34~42W | 法务审计字段、财务口径 |
|
||||
|
||||
|
||||
**外部强依赖**:比特安索控制台权限、Callback 出口网络、现场客户端发版窗口(与 BP-10 同步)。
|
||||
|
||||
---
|
||||
|
||||
## 10. 假设、风险与待办
|
||||
|
||||
|
||||
| 类型 | 内容 |
|
||||
| ------ | ---------------------------------------------------------------- |
|
||||
| **假设** | 单团队 2 周迭代;需求变更每周冻结;比特 API/控制台能力不降级 |
|
||||
| **风险** | Webhook 延期则 V1.0 砍为「仅收件箱+人工」,激活仍走 BP-05 |
|
||||
| **风险** | 合同字段反复 → I3 膨胀;建议首期 **法务一次评审** |
|
||||
| **待办** | 将本文迭代 **I1~I6** 导入 Jira/飞书 **Epic/Story**;为每条 BP 指定 **流程 Owner** |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 11. 修订记录
|
||||
|
||||
|
||||
| 日期 | 说明 |
|
||||
| ---------- | ---------------------------------------------- |
|
||||
| 2026-04-06 | 初版:工作区文档走查;BP-01~11 流程;泳道图;V1.0~V2.0 路线图与迭代排期。 |
|
||||
| 2026-04-06 | §7 增加指向三轨并行执行文档(后端/前端/SDK)。 |
|
||||
|
||||
|
||||
@@ -0,0 +1,400 @@
|
||||
# 客户商务与交付管理平台 — 功能模块划分与功能点(产品视角)
|
||||
|
||||
> **平台全称**:广州创飞人工智能技术有限公司客户商务与交付管理平台。
|
||||
> **文档性质**:产品经理视角的 **模块划分** 与 **功能点清单**,用于需求评审、版本切片与验收对齐。
|
||||
> **关联文档**:[平台与比特对接总览](chuangfei-bitanswer-integration-platform.md)(定位、架构、分阶段路线) · [**业务流程与版本排期**](chuangfei-platform-bpm-and-roadmap.md)(BPM、迭代计划) · [工作区工程划分](engineering/WORKSPACE_ENGINEERING_LAYOUT.md)。
|
||||
> **优先级约定**:**P0** = MVP 必含;**P1** = 增强运营效率;**P2** = 治理与规模化。同一功能可在多期迭代交付,表中标注为「首期目标优先级」。
|
||||
|
||||
---
|
||||
|
||||
## 1. 模块总览
|
||||
|
||||
|
||||
| 序号 | 模块名称 | 一句话职责 | 典型主要用户 |
|
||||
| --- | -------------------- | ---------------------------------- | ---------------- |
|
||||
| M1 | **客户与项目中心** | 客户主数据、项目与干系人,作为合同与交付的上游 | 商务、客户经理 |
|
||||
| M2 | **合同与履约行** | 合同全生命周期、标的与行项,对齐「卖什么」 | 商务、订单支持 |
|
||||
| M3 | **交付管理** | 交付批次、交付清单与完成状态,衔接「可激活」前提 | 交付/实施 |
|
||||
| M4 | **授权与许可运营** | SN 台账、与合同/交付绑定、激活状态、与比特侧映射 | License Ops |
|
||||
| M5 | **许可事件(Callback)运营** | 比特规则 Webhook 入站记录、关联、处置与补偿 | License Ops、研发支撑 |
|
||||
| M6 | **授权集成与配置** | 产品线↔比特 ID 映射、环境 URL、客户端授权 JSON 治理 | 架构、License Ops |
|
||||
| M7 | **设备与终端治理** | 设备标识、换机与激活历史(与 `device:`* 事件对齐) | 交付、License Ops |
|
||||
| M8 | **通知与待办** | 关键事件触达、任务队列与 SLA 提示 | 全员(按角色) |
|
||||
| M9 | **报表与对账** | 履约与授权一致性视图、缺口与到期 | 管理层、Ops、财务(只读) |
|
||||
| M10 | **审计与合规** | 关键操作留痕、导出与留存策略 | 合规、管理层 |
|
||||
| M11 | **身份、访问与平台管理** | **登录/登出与会话**、用户组织、**角色权限**、字典与系统参数 | 全员登录;管理员维护账号与权限 |
|
||||
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
M1[客户与项目 M1]
|
||||
M2[合同与履约行 M2]
|
||||
M3[交付管理 M3]
|
||||
M4[授权与许可运营 M4]
|
||||
M5[许可事件 Callback M5]
|
||||
M6[授权集成与配置 M6]
|
||||
M7[设备与终端 M7]
|
||||
M8[通知与待办 M8]
|
||||
M9[报表与对账 M9]
|
||||
M10[审计与合规 M10]
|
||||
M11[身份与平台管理 M11]
|
||||
|
||||
M1 --> M2
|
||||
M2 --> M3
|
||||
M2 --> M4
|
||||
M3 --> M4
|
||||
M6 --> M4
|
||||
M5 --> M4
|
||||
M4 --> M7
|
||||
M5 --> M8
|
||||
M4 --> M9
|
||||
M3 --> M9
|
||||
M2 --> M9
|
||||
M1 --> M10
|
||||
M2 --> M10
|
||||
M3 --> M10
|
||||
M4 --> M10
|
||||
M5 --> M10
|
||||
M11 --> M1
|
||||
```
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 2. M1 客户与项目中心
|
||||
|
||||
**定位**:统一客户与项目上下文,避免合同、交付、SN 挂在「无名客户」或重复档案上。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | ------------- | -------------------------------------------- | --- |
|
||||
| M1-F01 | 客户档案创建/编辑 | 客户名称、统一社会信用代码/客户编码、行业、地址、开票信息等(字段以法务/财务为准裁剪) | P0 |
|
||||
| M1-F02 | 客户列表与检索 | 多条件筛选、分页、关键字搜索 | P0 |
|
||||
| M1-F03 | 客户详情聚合视图 | 关联项目数、在履约合同数、在途 SN 数等摘要(只读统计) | P0 |
|
||||
| M1-F04 | 项目创建/编辑 | 项目名称、所属客户、阶段、计划起止、项目经理 | P0 |
|
||||
| M1-F05 | 项目列表与筛选 | 按客户、阶段、时间筛选 | P0 |
|
||||
| M1-F06 | 项目干系人 | 客户侧联系人、内部负责人、角色标签 | P0 |
|
||||
| M1-F07 | 客户/项目冻结与解冻 | 禁止新业务挂载或仅允许只读(规则可配置) | P1 |
|
||||
| M1-F08 | 客户合并与去重 | 疑似重复客户识别、合并流程与审计 | P2 |
|
||||
| M1-F09 | 与外部 CRM 主数据同步 | 以外部 ID 关联、增量同步状态展示(不替代 CRM 全能力) | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. M2 合同与履约行
|
||||
|
||||
**定位**:合同是「卖什么」的权威来源之一;履约行/合同行是 SN 与交付的锚点。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | --------------- | ------------------------------- | --- |
|
||||
| M2-F01 | 合同登记与编辑 | 合同编号、客户、关联项目、签订日、生效日、终止条件 | P0 |
|
||||
| M2-F02 | 合同状态机 | 草稿、待生效、生效、变更中、终止/到期等;非法跳转拦截 | P0 |
|
||||
| M2-F03 | 合同标的摘要 | 产品/模块/数量/期限/席位等业务口径展示(可与行项汇总一致) | P0 |
|
||||
| M2-F04 | 合同行项(履约行) | 多行:SKU 或产品包、数量、单价(可选)、交付与授权口径 | P0 |
|
||||
| M2-F05 | 合同附件 | 上传扫描件/电子签输出(存储与权限受控) | P1 |
|
||||
| M2-F06 | 合同与订单关联 | 外部订单号、内部订单记录 ID(若存在订单系统) | P1 |
|
||||
| M2-F07 | 合同变更与版本 | 变更单、版本号、影响授权差异提示(与 M4 联动) | P1 |
|
||||
| M2-F08 | 合同行与授权 SKU 规则映射 | 行项默认映射到许可 SKU/特征包(与 M6 联动) | P1 |
|
||||
| M2-F09 | 合同到期与续费提醒 | 基于生效/结束日期的列表与订阅(与 M8 联动) | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4. M3 交付管理
|
||||
|
||||
**定位**:记录「交了什么、何时可激活」,是 License Ops 发放 SN 的前置依据之一。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | ----------- | ------------------------------- | --- |
|
||||
| M3-F01 | 交付批次创建 | 关联项目/合同,批次号、计划交付日 | P0 |
|
||||
| M3-F02 | 交付清单 | 交付物条目:产品实例、数量、环境说明、备注 | P0 |
|
||||
| M3-F03 | 交付与合同行关联 | 每条交付行可关联合同行项,支撑对账 | P0 |
|
||||
| M3-F04 | 交付状态 | 未交付、已交付、部分交付;关键状态变更留痕 | P0 |
|
||||
| M3-F05 | 交付完成确认 | 责任人、完成时间、可选客户签收记录 | P0 |
|
||||
| M3-F06 | 现场环境信息 | 部署地址、网络要求、联系人(敏感字段权限控制) | P1 |
|
||||
| M3-F07 | 交付与 SN 发放门禁 | 规则:仅「已交付」合同范围可生成/绑定 SN(可配置为强/弱) | P1 |
|
||||
| M3-F08 | 交付模板 | 按产品线预置交付清单模板 | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 5. M4 授权与许可运营
|
||||
|
||||
**定位**:SN 与激活事实的台账中心;不替代比特控制台,但与比特状态 **摘要对齐、可追溯**。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | -------------- | ---------------------------- | --- |
|
||||
| M4-F01 | SN 手工录入/导入 | 单条新增、批量导入(模板校验、重复提示) | P0 |
|
||||
| M4-F02 | SN 与合同/项目/客户绑定 | 必选关联路径之一(合同行或项目),禁止裸 SN 或仅警告 | P0 |
|
||||
| M4-F03 | SN 生命周期状态 | 未发放、已发放、已激活、已冻结、已回收、异常等 | P0 |
|
||||
| M4-F04 | SN 详情页 | 展示绑定关系、发放记录、激活时间、最近事件摘要 | P0 |
|
||||
| M4-F05 | 激活结果回写 | 人工录入或接口同步:成功/失败及原因码分类 | P0 |
|
||||
| M4-F06 | 比特控制台状态摘要 | 同一 SN 的关键字段摘要或控制台链接(只读,权限控制) | P0 |
|
||||
| M4-F07 | 批量 SN 操作 | 批量绑定、批量状态变更(审批可选) | P1 |
|
||||
| M4-F08 | 授权需求单 | 由合同/交付生成的「待发放 SN」清单,供 Ops 执行 | P1 |
|
||||
| M4-F09 | 试用/正式/续期标签 | 与业务口径一致的标签,便于筛选与报表 | P1 |
|
||||
| M4-F10 | SN 与设备关联视图 | 展示绑定 `mid` 列表与历史(依赖 M7) | P1 |
|
||||
| M4-F11 | 授权策略生效视图 | 展示当前映射版本、环境(与 M6 联动) | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 6. M5 许可事件(Callback)运营
|
||||
|
||||
**定位**:承接比特规则 **HTTPS Callback**,保证 **不断链、可关联、可处置**。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | ----------- | -------------------------------------------------------------------------------------------------------------------- | --- |
|
||||
| M5-F01 | 事件收件箱列表 | 按时间、事件类型、`sn`、处理状态筛选 | P0 |
|
||||
| M5-F02 | 事件详情 | 展示解析后字段 + 脱敏后的原始 payload;关联 SN/合同 | P0 |
|
||||
| M5-F03 | 处理状态 | 待处理、已处理、失败、忽略;处理人与时间 | P0 |
|
||||
| M5-F04 | 关联解析失败兜底 | 无法关联主数据时保留事件并支持人工挂接 | P0 |
|
||||
| M5-F05 | 事件类型字典 | `sn:pre_activate`、`sn:post_activate`、`device:pre_activate`、`device:post_activate`、`yunbaobao:session_logout` 等展示名与说明 | P0 |
|
||||
| M5-F06 | 失败原因标注 | Ops 可选分类,便于报表 | P1 |
|
||||
| M5-F07 | 批量重处理/重试入口 | 在业务允许范围内触发补偿(与后端幂等策略一致) | P1 |
|
||||
| M5-F08 | 死信与积压监控视图 | 队列深度、最久未处理 TOP(与可观测联动) | P1 |
|
||||
| M5-F09 | 事件驱动待办 | 自动生成待办卡片(与 M8 联动) | P1 |
|
||||
| M5-F10 | 模拟投递(仅测试环境) | 联调验收工具 | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 7. M6 授权集成与配置
|
||||
|
||||
**定位**:把「产品线—比特产品/模版/业务/特征 ID—环境 URL」管起来,支撑客户端 JSON 与联调。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | ----------------- | -------------------------------------------------------------- | --- |
|
||||
| M6-F01 | 产品线定义 | 产品线编码、名称、说明 | P0 |
|
||||
| M6-F02 | 环境维度 | 开发/测试/预发/生产及对应 `bitanswer.url` 登记 | P0 |
|
||||
| M6-F03 | 比特侧 ID 映射 | 产品、模版、业务 ID 与产品线+环境绑定(与控制台一致) | P1 |
|
||||
| M6-F04 | 逻辑功能键 ↔ 特征项映射 | 对齐 `craftlabs-auth-config` 中 `features.*.bitanswerFeatureId` 等 | P1 |
|
||||
| M6-F05 | 授权 JSON 模板管理 | 模板版本、变更说明、与 Schema 校验结果(可接 CI) | P1 |
|
||||
| M6-F06 | 配置发布记录 | 谁、何时、发布了哪一版到哪一环境 | P1 |
|
||||
| M6-F07 | 控制台链接与说明 | 规则 Callback URL、token 轮换登记(非密钥明文展示) | P1 |
|
||||
| M6-F08 | SDK / native 版本矩阵 | 与现场客户端兼容范围说明 | P2 |
|
||||
| M6-F09 | 变更影响分析 | 映射变更影响哪些在服 SN/合同(只读分析) | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 8. M7 设备与终端治理
|
||||
|
||||
**定位**:支撑浮动、换机、终端限制类场景,与比特 `device:`* 事件及 `mid` 对齐。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | ----------------- | ----------------------- | --- |
|
||||
| M7-F01 | 设备登记 | `mid`、别名、场站、关联客户/项目 | P1 |
|
||||
| M7-F02 | 设备与 SN 绑定历史 | 时间线:首次激活、换机、解绑 | P1 |
|
||||
| M7-F03 | 换机申请与处理记录 | 轻量审批可选;处理结果与备注 | P1 |
|
||||
| M7-F04 | 设备列表与检索 | 按 SN、客户、场站筛选 | P1 |
|
||||
| M7-F05 | 与 Callback 设备事件联动 | 从事件跳转设备详情 | P1 |
|
||||
| M7-F06 | 终端数/并发策略展示 | 只读展示合同或比特策略摘要(不重复造规则引擎) | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 9. M8 通知与待办
|
||||
|
||||
**定位**:把「该谁处理」说清楚,降低 Callback 与 SN 异常堆积。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | ------------ | ------------------------------- | --- |
|
||||
| M8-F01 | 站内待办列表 | 按角色过滤:待处理 Callback、待发放 SN、待核对激活 | P1 |
|
||||
| M8-F02 | 待办认领与完成 | 状态流转与备注 | P1 |
|
||||
| M8-F03 | 邮件/企业微信等一种通道 | 关键事件必达一种(可配置订阅) | P1 |
|
||||
| M8-F04 | 通知模板 | 事件类型 → 模板变量 | P2 |
|
||||
| M8-F05 | 静默规则 | 重复事件聚合、防骚扰 | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 10. M9 报表与对账
|
||||
|
||||
**定位**:给管理层与 Ops **履约 vs 授权** 的一致性视图。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------ | ---------------- | ------------------- | --- |
|
||||
| M9-F01 | 合同标的 vs 已发 SN 视图 | 按合同/行项汇总应发、实发 | P1 |
|
||||
| M9-F02 | 已发 vs 已激活视图 | 未激活占比、超期未激活列表 | P1 |
|
||||
| M9-F03 | Callback 统计 | 按类型、状态、时间段的成功率与耗时分布 | P1 |
|
||||
| M9-F04 | 导出 CSV/Excel | 权限与脱敏策略受控 | P1 |
|
||||
| M9-F05 | 项目健康度看板 | 多项目并行时的红黄绿(规则可配置) | P2 |
|
||||
| M9-F06 | 订阅报表 | 定期邮件推送 | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 11. M10 审计与合规
|
||||
|
||||
**定位**:满足内审与客户抽样举证,**关键操作不可抵赖**。
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------- | -------- | --------------------------- | --- |
|
||||
| M10-F01 | 关键字段变更日志 | 客户、合同、SN 绑定、状态变更:旧值/新值/人/时间 | P0 |
|
||||
| M10-F02 | 审计检索 | 按对象 ID、用户、时间范围查询 | P1 |
|
||||
| M10-F03 | 导出审计包 | 范围可选(项目/合同/时间窗),水印与权限 | P2 |
|
||||
| M10-F04 | 留存策略配置 | 与法务对齐的保留周期说明(技术实现另见架构) | P2 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 12. M11 身份、访问与平台管理
|
||||
|
||||
**定位**:**账户如何安全进入与退出系统**;进入后**能看能改什么**由角色与数据范围控制;以下为 **认证与会话**、**授权模型落地**、**平台配置** 三部分。
|
||||
|
||||
### 12.1 账户登录、登出与会话
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------- | ------------- | ----------------------------------------------- | --- |
|
||||
| M11-F01 | 登录页 | 账号(工号/邮箱/登录名可配置一种为主)+ 密码登录入口;错误提示不暴露用户是否存在(防枚举) | P0 |
|
||||
| M11-F02 | 登出 | 主动登出:清除服务端会话或作废令牌、前端清理本地凭证 | P0 |
|
||||
| M11-F03 | 登录态保持与超时 | **空闲超时**自动登出并提示;可选「记住本次会话」策略(与安全基线平衡,默认保守) | P0 |
|
||||
| M11-F04 | 未登录访问拦截 | 访问受保护路由时跳转登录页,登录成功后回跳原目标 URL(或安全白名单内路径) | P0 |
|
||||
| M11-F05 | 登录失败与锁定 | 连续失败次数阈值触发**临时锁定**或验证码;解锁策略(时长/管理员解锁)可配置 | P0 |
|
||||
| M11-F06 | 登录/登出审计 | 记录成功/失败登出、时间、来源 IP、客户端类型(脱敏与留存策略另定) | P0 |
|
||||
| M11-F07 | 密码修改 | 已登录用户修改本人密码;校验旧密码强度与新密码策略 | P0 |
|
||||
| M11-F08 | 密码重置 | 管理员重置密码或邮件/短信重置链接(通道选一种即可);重置后可选强制首次登录改密 | P1 |
|
||||
| M11-F09 | 企业 SSO / OIDC | 与企业身份源单点登录;登出可与 IdP **单点登出**联动(若 IdP 支持) | P1 |
|
||||
| M11-F10 | 双因素认证 MFA | TOTP/短信/企业令牌等一种;可配置为全员或高敏角色必选 | P2 |
|
||||
| M11-F11 | 并发会话策略 | 同一账号是否允许多端同时在线;超出策略时踢旧会话或拒绝新登录(可配置) | P1 |
|
||||
| M11-F12 | 管理员强制下线 | 安全或人事场景下终止指定用户本会话或全会话 | P1 |
|
||||
| M11-F13 | 服务时间窗提示(可选) | 维护窗口登录页公告 | P2 |
|
||||
|
||||
|
||||
### 12.2 用户、角色与权限配置(管理侧)
|
||||
|
||||
|
||||
| 功能点 ID | 功能点名称 | 说明 | 优先级 |
|
||||
| ------- | ---------------- | --------------------------------------------- | --- |
|
||||
| M11-F14 | 用户与账号生命周期 | 创建、启用/禁用、离职归档;与 SSO 时同步外部主键 | P0 |
|
||||
| M11-F15 | 角色定义与分配 | 预置角色(见 §13)+ 可选自定义角色;用户可挂多角色 | P0 |
|
||||
| M11-F16 | 功能权限(RBAC) | 菜单、按钮、API 操作与 **§13 权限码** 对齐;支持按环境预览「某用户看见什么」 | P0 |
|
||||
| M11-F17 | 数据范围(Data Scope) | 按事业部/区域/客户组限制列表可见行(与 M11-F18 二选一或组合) | P2 |
|
||||
| M11-F18 | 数据属主/团队 | 如「仅本人负责客户」「本团队项目」(字段:负责人、协作人) | P1 |
|
||||
| M11-F19 | 业务字典 | 合同类型、交付类型、SN 异常原因分类等 | P0 |
|
||||
| M11-F20 | 系统参数 | 「孤儿 SN」强校验、交付门禁、会话超时分钟数、密码策略等 | P1 |
|
||||
| M11-F21 | 管理员敏感操作留痕 | 改角色、改权限、强制下线、重置密码等单独记审计 | P1 |
|
||||
|
||||
|
||||
> **说明**:原 M11-F01~F06 已拆并至 **12.1 / 12.2**;实现时功能点 ID 以研发 backlog 为准,本文 ID 供需求追溯。
|
||||
|
||||
---
|
||||
|
||||
## 13. 角色与权限体系
|
||||
|
||||
### 13.1 模型说明
|
||||
|
||||
- **认证(Authentication)**:谁登录、会话是否有效 —— 对应 **§12.1**。
|
||||
- **授权(Authorization)**:登录后能做什么 —— **RBAC**(角色 → 权限码)为主,**数据范围**(事业部 / 团队 / 属主)为增强(P1/P2)。
|
||||
- **权限码**:建议与前后端统一枚举,例如 `module:resource:action`(如 `contract:order:export`),便于接口与按钮同源校验。
|
||||
|
||||
### 13.2 预置角色定义
|
||||
|
||||
|
||||
| 角色代码 | 角色名称 | 定位 | 典型职责 |
|
||||
| ---------------- | --------- | --------- | ---------------------------------------- |
|
||||
| `SYS_ADMIN` | 系统管理员 | 平台配置与账号治理 | 用户/角色/字典/系统参数;**不默认拥有业务全量数据**时可配置为「仅管理」 |
|
||||
| `SECURITY_ADMIN` | 安全管理员(可选) | 账号与登录安全 | 锁定策略、强制下线、审计检索;与 `SYS_ADMIN` 分离(职责分离,P2) |
|
||||
| `SALES` | 商务经理 | 客户与签约侧 | 客户、项目、合同维护;发起交付与授权需求 |
|
||||
| `ORDER_SUPPORT` | 订单/运营支持 | 履约对齐 | 合同行与 SKU、订单号关联;协助商务核对「卖授一致」 |
|
||||
| `DELIVERY` | 交付工程师 | 现场交付 | 交付批次与清单、环境信息、交付完成确认 |
|
||||
| `LICENSE_OPS` | 授权运营 | 许可台账与比特协同 | SN 全生命周期、Callback 处置、与控制台操作配合 |
|
||||
| `DEV_SUPPORT` | 研发/集成支撑 | 技术排障 | Callback 技术字段、集成配置**只读或受限编辑**;无业务合同删除权 |
|
||||
| `FINANCE_VIEW` | 财务只读 | 对账与收入支撑 | 报表与合同/SN **只读**;无改密权外的写权限 |
|
||||
| `COMPLIANCE` | 合规/审计 | 抽查与导出 | 审计日志、导出包;业务数据多为 **只读** |
|
||||
| `EXEC_VIEW` | 管理层只读 | 经营视图 | 报表与健康度看板 **只读** |
|
||||
| `READONLY_ALL` | 业务只读(可选) | 跨模块浏览 | 全业务 **只读**,用于培训或二线;敏感字段仍脱敏 |
|
||||
|
||||
|
||||
**多角色**:用户可同时拥有 `SALES` + `DELIVERY` 等,权限取**并集**;互斥规则(如 `SYS_ADMIN` 与业务高敏导出)由企业策略在实现时约束。
|
||||
|
||||
### 13.3 模块级权限矩阵(摘要)
|
||||
|
||||
约定:**—** 无访问;**R** 查看;**W** 新建与编辑;**D** 删除;**X** 导出;**A** 审批/处置类(认领、重试、状态变更);**M** 模块管理配置(映射、字典、系统参数)。
|
||||
|
||||
|
||||
| 模块 | SYS_ADMIN | SALES | ORDER_SUPPORT | DELIVERY | LICENSE_OPS | DEV_SUPPORT | FINANCE_VIEW | COMPLIANCE | EXEC_VIEW |
|
||||
| ----------- | --------- | ---------- | ------------- | -------- | ----------- | ----------- | ------------ | ---------- | --------- |
|
||||
| M1 客户与项目 | M / RWD | RWD | R | R | R | R | R | R | R |
|
||||
| M2 合同 | M / RWDX | RWDX | RWD | R | R | R | RX | RX | R |
|
||||
| M3 交付 | M / RWD | R | R | RWD | R | R | R | R | R |
|
||||
| M4 授权/SN | M / RWDA | R | R | R | RWDA | R | RX | R | R |
|
||||
| M5 Callback | M / RA | — | — | — | RA | R | R | R | R |
|
||||
| M6 集成配置 | M | — | — | — | RW | R(只读为主) | — | R | — |
|
||||
| M7 设备 | M / RW | R | R | RW | RW | R | R | R | R |
|
||||
| M8 待办 | M | R | R | R | R | R | R | R | R |
|
||||
| M9 报表 | M | R | R | R | R | R | RX | RX | R |
|
||||
| M10 审计 | M | — | — | — | — | R | R | RX | — |
|
||||
| M11 身份与平台 | M(全量) | 仅 F07 本人改密 | 同左 | 同左 | 同左 | 同左 | 同左 | R(审计检索) | — |
|
||||
|
||||
|
||||
**说明**:
|
||||
|
||||
- `SYS_ADMIN` 列中 **M / RWD** 表示:至少能 **M**(用户角色字典参数);是否开放业务 **RWD** 由企业决定 —— 建议生产环境 **默认关闭** 业务写权限,仅保留 M11 管理面。
|
||||
- `SECURITY_ADMIN`(若启用):建议拥有 M11 中 F05~F12、F21 及 M10 审计检索 **RX**,**不**默认拥有 M4 SN 发放。
|
||||
- `DEV_SUPPORT`:M6 建议 **仅 R**;若需改测试环境映射可走 **变更工单 + 临时提权**。
|
||||
- 细粒度需在实现阶段将矩阵展开为 **权限码清单**(每个菜单、按钮、导出、删除各一条)。
|
||||
|
||||
### 13.4 权限码命名建议(示例)
|
||||
|
||||
|
||||
| 权限码 | 含义 |
|
||||
| ------------------------------- | -------------- |
|
||||
| `auth:session:logout` | 本人登出(全员) |
|
||||
| `auth:user:password:change` | 本人改密 |
|
||||
| `admin:user:manage` | 用户 CRUD |
|
||||
| `admin:role:manage` | 角色与权限绑定 |
|
||||
| `customer:project:rw` | M1 读写 |
|
||||
| `contract:order:rw` | M2 合同读写 |
|
||||
| `contract:order:export` | M2 导出 |
|
||||
| `delivery:batch:rw` | M3 交付读写 |
|
||||
| `license:sn:rw` | M4 SN 读写 |
|
||||
| `license:sn:export` | M4 导出 |
|
||||
| `license:callback:process` | M5 处置 Callback |
|
||||
| `integration:config:rw` | M6 配置写 |
|
||||
| `integration:config:read` | M6 只读 |
|
||||
| `report:view` / `report:export` | M9 |
|
||||
| `audit:search` / `audit:export` | M10 |
|
||||
|
||||
|
||||
### 13.5 与版本包的关系(对应 §14)
|
||||
|
||||
- **MVP(P0)**:§12.1 的 F01~F07 + §12.2 的 F14~F16 + F19;§13.2 至少落地 `SYS_ADMIN`、`SALES`、`DELIVERY`、`LICENSE_OPS`、`ORDER_SUPPORT`、`EXEC_VIEW`(或合并只读角色);§13.3 矩阵可先 **粗粒度**(模块级),Mid 再拆按钮级权限码。
|
||||
- **Mid(P1)**:SSO、会话并发、强制下线、密码重置、数据属主/团队;`DEV_SUPPORT`、`FINANCE_VIEW`;权限码全量挂菜单/接口。
|
||||
- **Full(P2)**:MFA、`SECURITY_ADMIN`、事业部数据范围、细粒度互斥策略。
|
||||
|
||||
---
|
||||
|
||||
## 14. 按版本包的功能边界(与 P0 / P1 / P2 对齐)
|
||||
|
||||
|
||||
| 版本包 | 包含模块与要点 |
|
||||
| -------- | ------------------------------------------------------------------------------------------------------------------------- |
|
||||
| **MVP** | M1、M2、M3、M4 核心功能点 + M5 收件箱与基础处置 + M6 环境与产品线最小集 + **M11 §12.1(登录/登出/会话/审计)+ §12.2 用户角色权限与字典** + M10-F01;角色矩阵 **§13.3 粗粒度** |
|
||||
| **Mid** | MVP + M7 + M8 + M9 主体 + M2/M4/M5/M6 增强项 + M10-F02 + **M11 SSO/并发/强制下线/重置密码/数据属主** + **权限码细拆** |
|
||||
| **Full** | Mid + M2/M6/M9/M10/M11 的 P2 项 + M1/M8 集成与智能化类增强 + **MFA、安全管理员、数据范围** |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 15. 修订记录
|
||||
|
||||
|
||||
| 日期 | 说明 |
|
||||
| ---------- | ---------------------------------------------------------------------------------- |
|
||||
| 2026-04-06 | 初版:产品视角模块划分与功能点表。 |
|
||||
| 2026-04-06 | 增补:M11 扩展为身份/访问/平台管理;**登录/登出/会话**功能点;**§13 角色与权限体系**(预置角色、模块矩阵、权限码示例);版本包与 §14 对齐。 |
|
||||
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
# 平台前后端 × 客户端 SDK — 并行迭代执行索引
|
||||
|
||||
> **目的**:在 [BPM 与版本排期](../chuangfei-platform-bpm-and-roadmap.md) 的 **I1~I6 / V1.1 / Mid / V2.0** 框架下,**三条工程线并行**落地时的 **入口文档、同步点与职责**。
|
||||
> **基准**:与 [WORKSPACE_ENGINEERING_LAYOUT.md](./WORKSPACE_ENGINEERING_LAYOUT.md)(Fat JAR、禁止服务端 `craftlabs-auth-bitanswer`)一致。
|
||||
> **全景**:系统上下文、容器、组件与时序见 [SYSTEM_ARCHITECTURE.md](./SYSTEM_ARCHITECTURE.md)。
|
||||
> **安全**:信任边界、威胁缓解与分组件控制见 [SYSTEM_ARCHITECTURE.md §9](./SYSTEM_ARCHITECTURE.md)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 三条轨道与文档
|
||||
|
||||
| 轨道 | 仓库/工作区 | 执行包文档 |
|
||||
|------|-------------|------------|
|
||||
| **A. 平台后端** | `craftlabs-delivery-platform` + `craftlabs-license-webhook`(规划) | [tracks/01-backend-platform-webhook.md](./tracks/01-backend-platform-webhook.md) |
|
||||
| **B. 平台前端** | `craftlabs-delivery-platform-ui`(规划) | [tracks/02-frontend-platform-ui.md](./tracks/02-frontend-platform-ui.md) |
|
||||
| **C. 客户端 SDK** | 本工作区 `craftlabs-authorization-sdk` | [tracks/03-client-sdk.md](./tracks/03-client-sdk.md) |
|
||||
|
||||
---
|
||||
|
||||
## 2. 并行模型(同迭代日历)
|
||||
|
||||
三轨 **共用** Roadmap 的 **I1~I6**(各约 **2 周**),同一迭代内并行开工;**硬耦合**集中在 **I5(Callback + Schema)** 与 **I6(UAT)**。
|
||||
|
||||
| 迭代 | 后端(双 JAR) | 前端(Vue) | 客户端 SDK(本仓) |
|
||||
|------|----------------|-------------|---------------------|
|
||||
| I1 | 身份 + Webhook 脚手架 | 登录 + 布局壳 + RBAC 路由 | 文档/边界说明,无阻塞发布 |
|
||||
| I2 | M1 主数据 + 字典 | 客户/项目页 | 同上 |
|
||||
| I3 | M2 合同 + M10-F01 | 合同向导与行项 | 同上 |
|
||||
| I4 | M3 交付 + M4 SN | 交付 + SN 页 | 文档与示例与 BP-10 口径一致 |
|
||||
| I5 | M5 Inbox + M6 + Webhook 生产链 | Callback + 集成只读页 | **Schema + AuthConfigs + examples 对齐 BP-10** |
|
||||
| I6 | 加固 + UAT | E2E + 缺陷 | **冻结 SDK 版本 + CHANGELOG + 兼容矩阵** |
|
||||
|
||||
---
|
||||
|
||||
## 3. 跨轨同步点(必须对齐)
|
||||
|
||||
| 周次/迭代 | 同步内容 | 参与方 |
|
||||
|-----------|----------|--------|
|
||||
| **I1 末** | 认证方式(JWT vs Session)、OpenAPI `auth` tag、错误码与 401 行为 | 后端 + 前端 |
|
||||
| **I2 末** | 客户/项目 DTO 冻结;字典编码 | 后端 + 前端 |
|
||||
| **I3 末** | 合同状态枚举与非法迁移码;M10-F01 字段 | 后端 + 前端 |
|
||||
| **I4 末** | SN 绑定与「孤儿 SN」规则;交付门禁参数(M11-F20) | 后端 + 前端 + SDK(文档) |
|
||||
| **I5 起** | Callback payload 与 inbox DTO;**Idempotency-Key**;Webhook→平台投递方式(HTTP/MQ) | 后端 Webhook + 后端平台 + 前端 + **SDK(Schema/示例)** |
|
||||
| **I6** | UAT 场景、冻结 **SDK 版本**、两枚 Fat JAR 与前端 `VITE_API_BASE` | 全员 |
|
||||
|
||||
**契约 Owner(建议角色)**:架构或 Tech Lead 兼任;**OpenAPI 单一事实来源** 为本仓库 [`contracts/openapi/delivery-platform-api.json`](../../contracts/openapi/delivery-platform-api.json)(与运行时 `/v3/api-docs` 由 `OpenApiContractSnapshotTest` 对齐),说明见 [`contracts/README.md`](../../contracts/README.md)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 依赖关系简图
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph FE[前端 UI]
|
||||
UI[Vue 3]
|
||||
end
|
||||
subgraph BE[平台 API]
|
||||
API[platform-bootstrap.jar]
|
||||
end
|
||||
subgraph WH[Webhook]
|
||||
WB[webhook-bootstrap.jar]
|
||||
end
|
||||
subgraph SDK[本仓库 SDK]
|
||||
JAR[craftlabs-auth-*]
|
||||
NAT[native]
|
||||
end
|
||||
|
||||
UI --> API
|
||||
WB -->|内部调用或 MQ| API
|
||||
SDK -.->|不依赖平台运行时| API
|
||||
JAR --> NAT
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 修订记录
|
||||
|
||||
| 日期 | 说明 |
|
||||
|------|------|
|
||||
| 2026-04-06 | 初版:三轨并行索引 + 同步点 + Gantt 示意。 |
|
||||
@@ -0,0 +1,562 @@
|
||||
# 系统架构设计 — 全景图与组件清单
|
||||
|
||||
> **角色**:资深架构师视角的 **系统上下文、容器划分、逻辑组件、数据流与部署边界** 的单一汇总页。
|
||||
> **读者**:研发、测试、运维、产品与集成方。
|
||||
> **关联**:[工作区工程划分](./WORKSPACE_ENGINEERING_LAYOUT.md) · [并行迭代索引](./PARALLEL_ITERATION_INDEX.md) · [功能模块 M1–M11](../chuangfei-platform-product-modules.md) · [比特对接总览](../chuangfei-bitanswer-integration-platform.md) · [`engineering/workspace-manifest.json`](../../engineering/workspace-manifest.json)
|
||||
> **安全专章**:本章 **§9**(含 **§9.0** 小团队阶段、**§9.8** SDK 发布完整性);与工作区 [WORKSPACE §10 安全边界](./WORKSPACE_ENGINEERING_LAYOUT.md) 互补。
|
||||
|
||||
---
|
||||
|
||||
## 1. 架构目标与原则
|
||||
|
||||
| 原则 | 说明 |
|
||||
|------|------|
|
||||
| **边界清晰** | **客户端授权运行时**(SDK + Native + 现场进程)与 **商业交付平台**(Web + 双后端 + 数据持久化)在 **依赖、发布周期、classpath** 上严格分离。 |
|
||||
| **契约先行** | 客户端配置以 **`schemas/craftlabs-auth-config.schema.json`** 为契约;Callback / OpenAPI 以 **文档与版本化契约** 对齐多轨迭代(见 [PARALLEL_ITERATION_INDEX](./PARALLEL_ITERATION_INDEX.md))。 |
|
||||
| **可运维** | 每个可独立扩缩的后端服务 **一枚 Fat JAR**(`spring-boot-maven-plugin` **repackage** 仅挂在启动模块);密钥与连接串 **不进** SDK 与示例仓库。 |
|
||||
| **数据栈锁定** | 平台持久化:**PostgreSQL 15** + **MyBatis-Plus**(详见 [WORKSPACE_ENGINEERING_LAYOUT §9.1](./WORKSPACE_ENGINEERING_LAYOUT.md))。 |
|
||||
| **安全默认** | **最小权限**、**纵深防御**、**可审计**;对外入口 **TLS**;敏感面(Webhook、管理 API、SN/许可数据)**单独威胁建模**与门禁。 |
|
||||
| **阶段目标(创飞当前)** | **小团队**:优先 **功能与需求闭环**;并发与规模 **不高**。平台侧 **单/双 Fat JAR + 单机或少量 VM** 上 `java -jar` 即可;**不将 K8s、云 KMS、服务网格** 作为现阶段必选项,待业务量与合规要求上升再演进。 **安全重心** 放在 **已发布 SDK 的完整性**(不易被 **替换、假冒**),见 **§9.0 / §9.8**。 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 系统上下文(C4 Level 1)
|
||||
|
||||
展示本体系与 **外部环境** 的关系:谁使用谁、谁回调谁。
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph Actors["参与者"]
|
||||
OPS[运维/管理员]
|
||||
BIZ[商务/交付/License Ops]
|
||||
DEV[客户侧研发]
|
||||
end
|
||||
|
||||
subgraph CraftLabs["创飞侧系统(本方案范围)"]
|
||||
UI[交付管理平台 Web UI]
|
||||
API[交付平台 API]
|
||||
WH[License Webhook Ingress]
|
||||
DB[(PostgreSQL 15)]
|
||||
end
|
||||
|
||||
subgraph ClientSite["客户现场 / 边缘环境"]
|
||||
APP[客户业务应用]
|
||||
SDK[CraftLabs 授权 SDK]
|
||||
NAT[BitAnswer Native 库]
|
||||
end
|
||||
|
||||
subgraph External["外部系统"]
|
||||
BA[比特安索云 / 控制台]
|
||||
end
|
||||
|
||||
OPS --> UI
|
||||
BIZ --> UI
|
||||
UI --> API
|
||||
API --> DB
|
||||
WH --> DB
|
||||
WH -->|内部 HTTP / MQ 异步| API
|
||||
|
||||
BA -->|规则 Callback HTTPS POST| WH
|
||||
SDK -->|Bit_Login / 许可 API| BA
|
||||
APP --> SDK
|
||||
SDK --> NAT
|
||||
|
||||
DEV -->|依赖 Maven 工件 + JSON 配置| SDK
|
||||
DEV -.->|阅读 Schema/文档| CraftLabs
|
||||
```
|
||||
|
||||
**读图要点**:
|
||||
|
||||
- **比特** 只与 **Webhook**(服务端入站)和 **SDK**(客户端出站授权)发生 **不同方向** 的交互;平台 UI **不** 替代 SDK 完成现场授权。
|
||||
- **SDK 不依赖** 平台 API 运行时;二者仅通过 **契约(Schema、文档、可选 OpenAPI 导出配置)** 弱耦合。
|
||||
|
||||
---
|
||||
|
||||
## 3. 容器架构(C4 Level 2)
|
||||
|
||||
本工作区与规划仓库中的 **可构建、可部署或可分发单元**。
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph Browser["用户浏览器"]
|
||||
SPA[Vue 3 SPA<br/>delivery-platform-ui]
|
||||
end
|
||||
|
||||
subgraph DMZ["接入层(可选 Gateway)"]
|
||||
GW[API Gateway / 反向代理<br/>规划]
|
||||
end
|
||||
|
||||
subgraph SimpleHost["机房或云主机(单机为主)"]
|
||||
JAR_API[delivery-platform-api<br/>Fat JAR :8080]
|
||||
JAR_WH[license-webhook-ingress<br/>Fat JAR :8081]
|
||||
PG[(PostgreSQL 15)]
|
||||
MQ[[消息队列<br/>可选·低并发可省]]
|
||||
end
|
||||
|
||||
subgraph ArtifactRepo["制品与契约"]
|
||||
MVN[Maven:cn.craftlabs / cn.craftlabs.platform]
|
||||
SCH[JSON Schema + examples]
|
||||
NATIVE[各 OS Native 动态库]
|
||||
end
|
||||
|
||||
subgraph CI["持续集成"]
|
||||
WF_SDK[ci-java.yml]
|
||||
WF_PLAT[ci-platform.yml]
|
||||
end
|
||||
|
||||
SPA -->|HTTPS /api| JAR_API
|
||||
GW -.-> JAR_API
|
||||
GW -.-> JAR_WH
|
||||
JAR_API --> PG
|
||||
JAR_WH --> PG
|
||||
JAR_WH -.-> MQ
|
||||
MQ -.-> JAR_API
|
||||
|
||||
MVN --> APPX[客户应用构建]
|
||||
SCH --> APPX
|
||||
NATIVE --> APPX
|
||||
|
||||
WF_SDK --> MVN
|
||||
WF_PLAT --> JAR_API
|
||||
WF_PLAT --> JAR_WH
|
||||
WF_PLAT --> SPA
|
||||
```
|
||||
|
||||
**阶段说明(创飞当前)**:并发不高时 **可不部署 MQ**(Webhook 直写库或由 API 轮询即可);后端以 **一台或两台云主机** 各跑 `java -jar …` 为主,**无需 K8s**。
|
||||
|
||||
| 容器 | 技术 / 形态 | 默认端口或产出 | 职责摘要 |
|
||||
|------|-------------|----------------|----------|
|
||||
| **delivery-platform-ui** | Vue 3 + Vite + Pinia + Element Plus | 静态资源 / dev server | 管理端 SPA:登录、领域页面、调用平台 REST。 |
|
||||
| **delivery-platform-api** | Spring Boot 3.4.x(目标 4.0.x)、Security、Actuator、MyBatis-Plus | **8080**、Fat JAR | 领域 API、认证、M1–M11 业务能力、读写字段库。 |
|
||||
| **license-webhook-ingress** | Spring Boot、Actuator | **8081**、Fat JAR | 比特 Callback 入站、验签/Token、快速 2xx、异步投递(表/MQ)。 |
|
||||
| **PostgreSQL** | 15.x | 5432 | 平台主库;与 SDK **无** 直连。 |
|
||||
| **SDK Java 模块** | 多模块 Maven,**非** Spring Boot | 多枚 `craftlabs-auth-*.jar` | 配置模型、BitAnswer 桥接、自托管占位等。 |
|
||||
| **Native** | CMake | `.so` / `.dylib` / `.dll` | 比特官方运行时绑定,随 SDK 版本发布。 |
|
||||
| **schemas + examples** | JSON Schema、样例 JSON | 无进程 | 配置契约与集成样例。 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 平台后端逻辑组件(领域视图)
|
||||
|
||||
与产品模块 **M1–M11** 对齐的 **逻辑分包**(实现可跨多 Maven 模块,但边界应一致)。
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph API["delivery-platform-api(逻辑)"]
|
||||
M11[identity / platform M11]
|
||||
M1[customer-project M1]
|
||||
M2[contract M2]
|
||||
M3[delivery M3]
|
||||
M4[licensing SN M4]
|
||||
M5[inbox callback M5]
|
||||
M6[integration mapping M6]
|
||||
M7[device M7]
|
||||
M8[notification M8]
|
||||
M9[reporting M9]
|
||||
M10[audit M10]
|
||||
PERS[persistence MyBatis-Plus]
|
||||
end
|
||||
|
||||
M11 --> M1
|
||||
M1 --> M2
|
||||
M2 --> M3
|
||||
M2 --> M4
|
||||
M3 --> M4
|
||||
M6 --> M4
|
||||
M5 --> M4
|
||||
M4 --> M7
|
||||
M5 --> M8
|
||||
M4 --> M9
|
||||
M1 & M2 & M3 & M4 & M5 --> M10
|
||||
|
||||
M1 & M2 & M3 & M4 & M5 & M6 & M7 & M8 & M9 & M10 & M11 --> PERS
|
||||
```
|
||||
|
||||
**Webhook 侧(license-webhook-ingress)逻辑组件**(精简):
|
||||
|
||||
| 组件 | 职责 |
|
||||
|------|------|
|
||||
| **Ingress Controller** | 接收 POST、限流与尺寸约束(规划加固)。 |
|
||||
| **Token / 签名验证** | `x-bitanswer-token` 或约定头;与 `CRAFTLABS_WEBHOOK_EXPECTED_TOKEN` 等环境变量对齐。 |
|
||||
| **幂等与投递** | `Idempotency-Key` 或 payload 内事件 ID;写入 **inbox** 或 **MQ**(I5+),由平台 API 消费。 |
|
||||
| **观测** | Actuator、结构化日志、指标(与平台统一约定)。 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 客户端 SDK 组件(本仓库 `java/` + `native/`)
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph SDK["CraftLabs Authorization SDK"]
|
||||
CORE[craftlabs-auth-core<br/>配置 / NativeBridge / 校验]
|
||||
BIT[craftlabs-auth-bitanswer<br/>Provider + loadLibrary]
|
||||
SH[craftlabs-auth-selfhosted<br/>占位实现]
|
||||
TST[craftlabs-auth-tests]
|
||||
end
|
||||
|
||||
SCH2[schemas + examples]
|
||||
JNI[libcraftlabs_auth_bitanswer]
|
||||
|
||||
CORE --> BIT
|
||||
CORE --> SH
|
||||
BIT --> JNI
|
||||
TST --> CORE
|
||||
SCH2 -.-> CORE
|
||||
```
|
||||
|
||||
**硬约束**:平台服务端 **禁止** 依赖 `craftlabs-auth-bitanswer` 与 **禁止** `System.loadLibrary("craftlabs_auth_bitanswer")`(见 [WORKSPACE §5](./WORKSPACE_ENGINEERING_LAYOUT.md))。
|
||||
|
||||
---
|
||||
|
||||
## 6. 关键运行时序
|
||||
|
||||
### 6.1 比特 Callback → 平台
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant BA as 比特安索云
|
||||
participant WH as license-webhook-ingress
|
||||
participant Store as PG / MQ
|
||||
participant API as delivery-platform-api
|
||||
participant UI as 管理端 UI
|
||||
|
||||
BA->>WH: POST /webhook/bitanswer/callback
|
||||
WH->>WH: 校验 Token / 幂等键
|
||||
WH->>Store: 持久化或入队(异步)
|
||||
WH-->>BA: 2xx 快速响应
|
||||
API->>Store: 拉取 / 消费事件
|
||||
UI->>API: 查询 Inbox / 处置状态
|
||||
```
|
||||
|
||||
### 6.2 管理员使用平台
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as 用户
|
||||
participant UI as delivery-platform-ui
|
||||
participant API as delivery-platform-api
|
||||
participant DB as PostgreSQL 15
|
||||
|
||||
U->>UI: 登录 / 操作业务页
|
||||
UI->>API: REST(Session / JWT 由迭代约定)
|
||||
API->>DB: MyBatis-Plus 读写
|
||||
API-->>UI: DTO / 错误码
|
||||
```
|
||||
|
||||
### 6.3 客户现场授权(与平台解耦)
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant APP as 客户应用
|
||||
participant SDK as craftlabs-auth-*
|
||||
participant NAT as Native
|
||||
participant BA as 比特安索云
|
||||
|
||||
APP->>SDK: 初始化 + 加载配置 JSON
|
||||
SDK->>SDK: Schema/规则校验(可选)
|
||||
SDK->>NAT: JNI 调用
|
||||
NAT->>BA: 许可 / 登录协议
|
||||
BA-->>NAT: 授权结果
|
||||
NAT-->>SDK: 回调结果
|
||||
SDK-->>APP: 授权状态 / 特征项
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 全量组件清单(Master Inventory)
|
||||
|
||||
下表覆盖 **本工作区已实现或已占位** 的组件;规划项标注为 **(规划)**。
|
||||
|
||||
| ID | 组件名称 | 类型 | 路径 / 坐标 / 产物 | 技术栈 | 主要职责 |
|
||||
|----|----------|------|-------------------|--------|----------|
|
||||
| C01 | **craftlabs-auth-parent** | Maven 聚合 | `java/pom.xml` | Java 17 | SDK 父工程、依赖与模块编排。 |
|
||||
| C02 | **craftlabs-auth-core** | Library JAR | `java/craftlabs-auth-core` | Java | 配置模型、`NativeBridge`、与 Schema 对齐的校验入口。 |
|
||||
| C03 | **craftlabs-auth-bitanswer** | Library JAR | `java/craftlabs-auth-bitanswer` | Java + JNI | `BitAnswerProvider`、`System.loadLibrary`、**仅客户端**。 |
|
||||
| C04 | **craftlabs-auth-selfhosted** | Library JAR | `java/craftlabs-auth-selfhosted` | Java | 自托管授权占位 / 扩展点。 |
|
||||
| C05 | **craftlabs-auth-tests** | 测试模块 | `java/craftlabs-auth-tests` | JUnit 等 | SDK 侧集成与回归测试。 |
|
||||
| C06 | **libcraftlabs_auth_bitanswer** | Native | `native/` | CMake | 各平台动态库,与 C02/C03 **同版本发布**。 |
|
||||
| C07 | **craftlabs-auth-config Schema** | 契约 | `schemas/craftlabs-auth-config.schema.json` | JSON Schema Draft 2020-12 | 客户端配置 **单一契约**;CI 与 SDK 测试可对齐校验。 |
|
||||
| C08 | **examples** | 样例 | `examples/` | JSON / 脚本 | 配置样例与烟测引用。 |
|
||||
| C09 | **documentation** | 文档 | `docs/` | Markdown | 产品、对接、工程、架构。 |
|
||||
| C10 | **engineering-meta** | 元数据 | `engineering/` | JSON / MD | `workspace-manifest.json`、planned 占位、README 索引。 |
|
||||
| C11 | **craftlabs-platform-services-parent** | Maven 聚合 | `services/pom.xml` | Java 17 + Spring Boot 3.4.x | 平台后端父 POM;**与 C01 分构建线**。 |
|
||||
| C12 | **delivery-platform-api** | 可执行 Fat JAR | `services/delivery-platform-api` | Spring Web/Security/Actuator、MyBatis-Plus、PostgreSQL 驱动 | 平台 REST、领域逻辑(迭代扩展)、**8080**。 |
|
||||
| C13 | **license-webhook-ingress** | 可执行 Fat JAR | `services/license-webhook-ingress` | Spring Web/Actuator | Callback 入站、Token、**8081**。 |
|
||||
| C14 | **PostgreSQL** | 基础设施 | 部署环境 / `services/docker-compose.yml` | 15.x | 平台主数据存储。 |
|
||||
| C15 | **delivery-platform-ui** | SPA | `web/delivery-platform-ui` | Vue 3、Vite、Pinia、vue-router、axios、Element Plus | 管理端界面;dev 代理 `/api` → API。 |
|
||||
| C16 | **CI:SDK Java** | 流水线 | `.github/workflows/ci-java.yml` | GitHub Actions | `java/` 构建与测试(JDK 版本以 workflow 为准)。 |
|
||||
| C17 | **CI:Platform + Web** | 流水线 | `.github/workflows/ci-platform.yml` | GitHub Actions | `services/` Maven verify + `web/` npm build。 |
|
||||
| C18 | **API Gateway** | 接入(规划) | 未在本仓 | 待定 | 统一 TLS、路由、限流(可选)。 |
|
||||
| C19 | **Message Queue** | 中间件(规划) | 未在本仓 | 待定 | Webhook 与 API 解耦、削峰(I5+ 常见形态)。 |
|
||||
| C20 | **企业 IdP** | 身份(规划) | 未在本仓 | OIDC/SAML 等 | 与 M11 企业登录集成(若需)。 |
|
||||
| C21 | **密钥与凭据** | 运维配置 | 部署机 | **环境变量**、**chmod 600 配置文件** | 注入 Webhook Token、DB 密码;**禁止** 进 Git;**不强制** 云 KMS。 |
|
||||
| C22 | **WAF / 边缘限流** | 安全(可选) | 边界 | 云 WAF 或 Nginx 限流模块 | 低并发阶段可省;对外暴露或合同要求时再上。 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 技术栈总览
|
||||
|
||||
| 分层 | 选型 | 备注 |
|
||||
|------|------|------|
|
||||
| 管理端 | Vue 3、Vite、Pinia、vue-router、axios、Element Plus | 构建产物静态托管或 CDN。 |
|
||||
| 平台 API | Spring Boot 3.4.x(路线图 4.0.x)、Spring Security、Actuator | Fat JAR 部署。 |
|
||||
| Webhook | 同上(独立进程) | 与 API **进程隔离**,失败域分离。 |
|
||||
| ORM | MyBatis-Plus(`mybatis-plus-spring-boot3-starter`) | Boot 4 时切换 `boot4-starter`。 |
|
||||
| 数据库 | PostgreSQL 15 | 测试可用 H2 PG 模式或 Testcontainers。 |
|
||||
| 客户端 SDK | Java 17、多模块薄 JAR | 不打 Spring Boot repackage。 |
|
||||
| 客户端 Native | CMake、比特官方 API | 与 Java **同版本 tag**。 |
|
||||
| 契约 | JSON Schema 2020-12 | `schemas/` 与 `examples/`。 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 安全架构(授权与平台)
|
||||
|
||||
授权与许可数据直接影响 **商业履约与合规**,安全需求高于一般内部后台。本节给出 **信任边界、威胁面、控制措施与演进要求**,供架构评审与渗透测试对齐。
|
||||
|
||||
### 9.0 阶段与重心(广州创飞 · 小团队)
|
||||
|
||||
| 维度 | 当前立场 |
|
||||
|------|----------|
|
||||
| **部署** | **单 Fat JAR / 进程** 部署在云主机或内网服务器;PostgreSQL 可与应用 **同机或同 VPC 内另一台**;**不强制** 容器编排与云 KMS。 |
|
||||
| **密钥** | Webhook Token、数据库密码等放在 **宿主机环境变量** 或 **权限受限的配置文件**(`chmod 600`、仅运行用户可读),**绝不** 提交 Git。 |
|
||||
| **优先级** | 先保证 **功能与需求闭环**;平台侧 **基础 TLS + 认证 + 日志脱敏** 即可满足多数早期场景。 |
|
||||
| **安全重心** | **对外发布的 SDK(JAR + Native)**:防范 **供应链篡改与假冒制品**;**破解/逆向** 的硬防线主要在 **比特安索 Native 与许可密码学**,Java 层需 **诚实评估**(见 **§9.8**)。 |
|
||||
|
||||
### 9.1 安全目标(CIA + 授权特有)
|
||||
|
||||
| 目标 | 含义 | 在本体系的落点 |
|
||||
|------|------|----------------|
|
||||
| **机密性** | 许可状态、SN、合同金额、Callback 原文、密钥不外泄 | TLS、日志脱敏、DB 访问控制、前端不持久化敏感令牌到不安全存储 |
|
||||
| **完整性** | Callback 与台账不被篡改;配置与制品未被替换 | Webhook 验签/共享密钥、幂等键、审计日志(M10)、依赖与镜像签名(供应链) |
|
||||
| **可用性** | 授权链路与管理端在约定 SLA 内可服务 | Webhook 快速 2xx + 异步处理;低并发阶段 **单机 + 健康检查** 即可,**不必** 预设 K8s 弹性扩容 |
|
||||
| **不可否认性**(按需) | 关键操作可追溯 | 审计表、WORM 或日志外送(合规场景) |
|
||||
|
||||
### 9.2 信任边界
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph Untrusted["不可信或半可信"]
|
||||
Internet((Internet))
|
||||
BA[比特云]
|
||||
CustomerNet[客户现场网络]
|
||||
Dev[集成方研发环境]
|
||||
end
|
||||
|
||||
subgraph TrustHigh["高信任 — 创飞数据面"]
|
||||
PG[(PostgreSQL)]
|
||||
Secrets[(凭据:宿主机环境变量<br/>或受限配置文件)]
|
||||
end
|
||||
|
||||
subgraph TrustMed["中信任 — 应用进程"]
|
||||
API[delivery-platform-api]
|
||||
WH[license-webhook-ingress]
|
||||
end
|
||||
|
||||
subgraph TrustUser["用户终端"]
|
||||
Browser[管理员浏览器]
|
||||
ClientApp[客户业务进程 + SDK]
|
||||
end
|
||||
|
||||
Internet -->|TLS 仅| WH
|
||||
Internet -->|TLS 仅| API
|
||||
Internet --> Browser
|
||||
BA -->|HTTPS Callback| WH
|
||||
CustomerNet --> ClientApp
|
||||
Dev -.->|Maven/文档| ClientApp
|
||||
|
||||
Browser -->|HTTPS + 会话/JWT| API
|
||||
ClientApp -->|TLS 至比特/自托管| BA
|
||||
|
||||
WH --> PG
|
||||
API --> PG
|
||||
API --> Secrets
|
||||
WH --> Secrets
|
||||
```
|
||||
|
||||
**边界规则**:
|
||||
|
||||
- **Webhook URL** 暴露在公网或 DMZ:视为 **持续被扫描**;必须 **TLS + 强认证 + 限流 + 最小响应体**。
|
||||
- **管理端 API**:仅对 **已认证主体** 开放业务写能力;**禁止** 将平台账号用于客户现场 SDK。
|
||||
- **SDK 配置 JSON**:含 `bitanswer.url`、`applicationData`、特征映射等,属 **客户环境机密**;**不得** 回传至创飞平台作为默认遥测(除非单独签署数据处理协议并做脱敏设计)。
|
||||
|
||||
### 9.3 威胁面与缓解(摘要)
|
||||
|
||||
| 威胁 | 示例 | 架构层缓解 |
|
||||
|------|------|------------|
|
||||
| **伪造 Callback** | 攻击者 POST 恶意 payload | **共享密钥**(如 `x-bitanswer-token` 与 `CRAFTLABS_WEBHOOK_EXPECTED_TOKEN` 常量时间比较);**比特官方 IP/证书钉扎**(若文档支持);**payload 大小与 JSON 深度限制** |
|
||||
| **重放** | 重复投递同一事件污染台账 | **幂等键**(`Idempotency-Key` / 事件 ID)+ 唯一约束;重复返回成功语义 |
|
||||
| **撞库 / 会话窃取** | 管理端弱口令、Token 泄露 | **密码策略 / MFA(规划)**、**HttpOnly + Secure Cookie** 或 **短期 JWT + 刷新**、**CORS 严格白名单** |
|
||||
| **越权** | 用户访问他人合同或 SN | **RBAC(M11)**、**行级授权**(组织/客户维度)、API **资源级鉴权** |
|
||||
| **注入** | SQL / 反序列化 | **参数化查询**(MyBatis `#{}`)、**禁用不安全的反序列化 gadget**、DTO 白名单 |
|
||||
| **SSRF**(若存在出站拉取) | 服务端替用户请求内网 | **出站 URL 白名单**、**禁用 file://**、独立网络分区 |
|
||||
| **供应链 / 假冒 SDK** | 第三方镜像站替换 JAR、客户误下「绿色版」 | **官方唯一分发渠道** + **GPG/SHA-256 校验**(§9.8);Maven 依赖 **锁定版本**;CI **依赖漏洞扫描**(力所能及) |
|
||||
| **日志泄露** | Callback 原文、Token 打日志 | **结构化日志字段脱敏**、**禁止 debug 打印完整 Authorization** |
|
||||
|
||||
### 9.4 分组件控制要求
|
||||
|
||||
#### 9.4.1 `license-webhook-ingress`
|
||||
|
||||
| 控制项 | 要求 |
|
||||
|--------|------|
|
||||
| 传输 | **仅 HTTPS**;HTTP 仅允许本机健康检查(若必须)且不得承载业务 |
|
||||
| 认证 | 配置 `CRAFTLABS_WEBHOOK_EXPECTED_TOKEN` 时 **强制校验** `x-bitanswer-token`(或比特约定头);生产 **禁止** 长期关闭校验 |
|
||||
| 处理 | **先校验后解析大对象**;限制 body 大小;超时快速失败仍返回约定错误码(避免资源耗尽) |
|
||||
| 观测 | 日志记录 **事件 ID、幂等键、结果码**;**不** 记录完整密钥与完整 payload(或脱敏后) |
|
||||
| 网络 | 云厂商 **安全组** 仅开放 443/业务端口;数据库 **不对公网**;单机阶段 **本机回环或内网 IP** 连库即可 |
|
||||
|
||||
#### 9.4.2 `delivery-platform-api`
|
||||
|
||||
| 控制项 | 要求 |
|
||||
|--------|------|
|
||||
| 认证 | I1 演示账号 **不得用于生产**;生产至少 **强口令**;团队具备条件时再上 **MFA / 企业 IdP(C20)** |
|
||||
| 授权 | 每个 mutating 接口 **显式角色/权限**;与 M11 角色矩阵一致 |
|
||||
| 数据 | DB 账号 **最小权限**(读写分离账号可选);连接串来自 **环境变量或宿主机配置**,禁止提交仓库 |
|
||||
| Actuator | **生产关闭或仅本机访问** `env`、`heapdump`;`health` 可给 **本机监控脚本或 Nginx 探活** |
|
||||
| CORS | **显式允许源**,禁用 `*` 携带凭证 |
|
||||
|
||||
#### 9.4.3 `delivery-platform-ui`
|
||||
|
||||
| 控制项 | 要求 |
|
||||
|--------|------|
|
||||
| 存储 | **不** 将 refresh token 写入 `localStorage`(优先 HttpOnly Cookie 或安全内存策略) |
|
||||
| CSP | 生产启用 **Content-Security-Policy**,限制内联脚本与未知域 |
|
||||
| 依赖 | `npm audit` 纳入 CI;锁定 lockfile |
|
||||
|
||||
#### 9.4.4 客户端 SDK 与 Native
|
||||
|
||||
| 控制项 | 要求 |
|
||||
|--------|------|
|
||||
| 配置 | `craftlabs-auth-config` 由 **宿主应用** 安全加载(文件权限、必要时磁盘加密);**禁止** 将含敏感字段的示例提交到客户代码库模板 |
|
||||
| 完整性 | Native **与 JAR 同版本** 分发;**正式发布** 必须带 **校验与/或签名**(见 **§9.8**) |
|
||||
| 运行时 | **不信任** 客户进程内存防护;敏感字符串尽量 **缩短生命周期**(比特 SDK 能力范围内) |
|
||||
|
||||
#### 9.4.5 PostgreSQL
|
||||
|
||||
| 控制项 | 要求 |
|
||||
|--------|------|
|
||||
| 网络 | DB **不暴露公网**;仅应用子网可达 |
|
||||
| 加密 | 云盘默认加密或宿主机全盘加密即可;敏感列 **应用层加密** 为可选增强 |
|
||||
| 审计 | 高危 DML/DDL 与 **管理员账号** 变更记入 M10 或 DB 审计扩展 |
|
||||
|
||||
### 9.5 与时序对齐的安全步骤(示意)
|
||||
|
||||
**Callback(补充安全步骤)**:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant BA as 比特安索云
|
||||
participant WH as Webhook
|
||||
participant Store as PG/MQ
|
||||
|
||||
BA->>WH: TLS + POST
|
||||
WH->>WH: TLS 终结校验(mTLS 仅在高合规客户场景考虑)
|
||||
WH->>WH: 校验 Token(常量时间)
|
||||
WH->>WH: 限制 body 大小 + 解析
|
||||
WH->>WH: 幂等键去重
|
||||
WH->>Store: 写入 inbox(脱敏日志)
|
||||
WH-->>BA: 2xx
|
||||
```
|
||||
|
||||
**管理端(补充安全步骤)**:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as 用户
|
||||
participant UI as SPA
|
||||
participant API as Platform API
|
||||
|
||||
U->>UI: 登录
|
||||
UI->>API: HTTPS + CSRF 防护(Cookie 模式)
|
||||
API->>API: 认证 + 颁发会话/JWT
|
||||
UI->>API: 业务请求 + 凭证
|
||||
API->>API: 鉴权(角色 + 资源)
|
||||
API-->>UI: 最小必要 DTO
|
||||
```
|
||||
|
||||
### 9.6 合规与审计衔接
|
||||
|
||||
- **M10 审计与合规**:登录、合同变更、SN 绑定/解绑、Callback 处置、权限变更等 **必须** 产生不可抵赖审计记录(谁、何时、对象 ID、前后摘要)。
|
||||
- **数据出境**:若 Callback 或日志含个人信息,需对齐 **个人信息保护法** 与客户 DPA。
|
||||
- **渗透测试**:有对外暴露或合同要求时,对 **Webhook** 与 **管理 API** 做专项测试(认证绕过、IDOR、批量枚举);小团队可 **采购外包渗透** 或分阶段补做。
|
||||
|
||||
### 9.7 架构评审安全清单(节选)
|
||||
|
||||
- [ ] Webhook 生产环境 **已启用** 共享密钥或更强机制(签名/HMAC 以比特文档为准)。
|
||||
- [ ] 管理 API **无** 默认弱口令路径;Actuator 敏感端点 **已收敛**。
|
||||
- [ ] 平台与 Webhook **未引入** `craftlabs-auth-bitanswer`。
|
||||
- [ ] 日志与异常栈 **无** 明文数据库密码、Token、完整 Callback。
|
||||
- [ ] OpenAPI 中 **错误码** 不泄露内部堆栈或枚举用户存在性(登录接口需谨慎)。
|
||||
- [ ] `examples/config/*.json` **无** 真实生产 URL/密钥(仅占位)。
|
||||
- [ ] **SDK 发布**:每个对外版本具备 **SHA-256 清单**;**强烈建议** GPG 签名与 **唯一官方下载说明**。
|
||||
- [ ] **SDK 发布**:`java` 与 `native` **同 tag**,CHANGELOG 与交付说明 **可追溯**。
|
||||
|
||||
### 9.8 SDK 发布完整性(当前安全重心)
|
||||
|
||||
客户侧 **Java 字节码可被反编译**,单靠混淆无法对抗动机足够的攻击者。**真正承担许可与密码学校验的**,应是 **比特安索 Native 与云端许可体系**。创飞 SDK 的安全目标应定位为:
|
||||
|
||||
1. **防篡改、防假冒**:客户拿到的是 **官方构建** 的 JAR/Native,未被中间人替换。
|
||||
2. **防版本错配**:JAR 与 `.so/.dylib/.dll` **同一次发布**(同 Git tag / 同一 Release 页),避免「新 JAR + 旧库」导致异常或绕过路径。
|
||||
3. **可追溯**:出问题能对照 **确切版本与校验和** 复现。
|
||||
|
||||
| 措施 | 说明 | 小团队可执行性 |
|
||||
|------|------|------------------|
|
||||
| **官方唯一渠道** | 仅通过 **公司控制的 Maven 私服 / GitHub Release / 合同交付包** 分发;**禁止** 引导客户从匿名网盘、论坛下载「整合包」。 | 必做 |
|
||||
| **SHA-256 清单** | 每个 Release 发布 `SHA256SUMS`;仓库内 **`scripts/sdk-release-checksums.sh`** 已落地,说明见 **`java/RELEASING.md`**;客户用 `sha256sum -c` / `shasum -a 256 -c` 校验。 | 必做 |
|
||||
| **GPG 签名** | Maven:**`mvn -f java/pom.xml -Prelease-sign verify`**(`maven-gpg-plugin`,各 JAR 旁生成 `.asc`);清单文件:`SIGN=1` 跑上述脚本生成 `SHA256SUMS.asc`。公布 **公钥指纹** 固定页。 | 强烈建议 |
|
||||
| **Git Tag = 发布单元** | `java/` 与 `native/` **同一 tag** 打发布;CHANGELOG 写清 **兼容的比特 SDK 版本**。 | 必做 |
|
||||
| **依赖锁定** | 客户工程使用 **明确版本号** 或 BOM;避免「浮动版本」被投毒依赖间接替换。 | 建议 |
|
||||
| **ProGuard 等混淆** | 仅增加逆向成本,**不能**替代 Native 侧安全;若上,只作 **非关键路径** 的辅助手段。 | 可选 |
|
||||
| **法务条款** | 许可协议中约定 **禁止反编译、再分发**(民事约束,与技术防护互补)。 | 建议 |
|
||||
|
||||
**客户集成检查清单(可印在交付文档)**:
|
||||
|
||||
- [ ] JAR/Native 均来自 **创飞官方渠道**,并已核对 **SHA-256**(或验签)。
|
||||
- [ ] 各工件版本号 **一致**,与发布说明中的 **比特依赖版本** 一致。
|
||||
- [ ] 未混入第三方「破解补丁」或修改版 `libcraftlabs_auth_bitanswer`。
|
||||
|
||||
---
|
||||
|
||||
## 10. 部署与网络(简图)
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph Public["公网 / 比特侧可达"]
|
||||
BA[比特 Callback 出口 IP]
|
||||
end
|
||||
|
||||
subgraph Perimeter["边界(常为一台 Nginx/Caddy)"]
|
||||
LB[TLS 终结 + 反代]
|
||||
end
|
||||
|
||||
subgraph AppTier["应用层(单机或双机 java -jar)"]
|
||||
WH_P[Webhook Fat JAR]
|
||||
API_P[Platform API Fat JAR]
|
||||
UI_S[静态 UI 或同机 Nginx 托管]
|
||||
end
|
||||
|
||||
subgraph DataTier["数据层"]
|
||||
PG_P[PostgreSQL 15<br/>单实例或云托管]
|
||||
end
|
||||
|
||||
BA --> LB --> WH_P
|
||||
Users((管理员浏览器)) --> LB --> UI_S
|
||||
Users --> LB --> API_P
|
||||
WH_P --> PG_P
|
||||
API_P --> PG_P
|
||||
```
|
||||
|
||||
**阶段注记(创飞当前)**:**不依赖 K8s**;扩容以 **加机器 + 多实例反代** 即可。**安全注记**:云安全组 **收紧**;PG **仅内网**;WAF/mTLS **按合同与预算** 选装,非 MVP 必选。
|
||||
|
||||
---
|
||||
|
||||
## 11. 修订记录
|
||||
|
||||
| 日期 | 说明 |
|
||||
|------|------|
|
||||
| 2026-04-06 | 初版:系统上下文、容器、领域与 SDK 组件图、时序、全量组件表、技术栈与部署简图。 |
|
||||
| 2026-04-06 | **§9 安全架构**:信任边界、威胁与缓解、分组件控制、安全时序、合规与评审清单;原则表增加 **安全默认**;部署节增加安全注记。 |
|
||||
| 2026-04-06 | **对齐小团队**:§1 **阶段目标**、§3 单机部署说明、§9.0、凭据改为宿主机配置、部署图改为 `java -jar` + Nginx;新增 **§9.8 SDK 发布完整性**(防篡改/假冒重心)。 |
|
||||
|
||||
---
|
||||
|
||||
**下一步**:领域表结构、OpenAPI 与事件 Schema 建议单独维护为 **版本化契约仓库** 或 `contracts/` 子模块,并在 [PARALLEL_ITERATION_INDEX](./PARALLEL_ITERATION_INDEX.md) 的同步点更新版本号。
|
||||
@@ -0,0 +1,276 @@
|
||||
# 工作区工程划分与仓库边界 — 架构说明
|
||||
|
||||
> **角色**:资深架构师对工作区现有资产与 **创飞客户商务与交付管理平台** 相关文档的对照走查结论。
|
||||
> **范围**:本 Git 工作区根目录 `craftlabs-authorization-sdk` 的 **物理目录、构建边界、发布物、与外部工程的契约**;**不**在本提交中迁移 `java/`、`native/` 路径(避免破坏既有 CI 与本地脚本)。
|
||||
> **关联**:[**系统架构全景(图 + 全量组件)**](./SYSTEM_ARCHITECTURE.md) · [功能模块](chuangfei-platform-product-modules.md) · [BPM 与排期](chuangfei-platform-bpm-and-roadmap.md) · [平台与比特对接](chuangfei-bitanswer-integration-platform.md) · [三轨并行执行索引](./PARALLEL_ITERATION_INDEX.md) · [根目录 `engineering/` 清单](../../engineering/workspace-manifest.json)
|
||||
|
||||
---
|
||||
|
||||
## 1. 走查结论(摘要)
|
||||
|
||||
|
||||
| 维度 | 现状 | 架构建议 |
|
||||
| --------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
|
||||
| **工作区身份** | 以 **客户端授权 SDK**(Java + Native)为核心,配套 **Schema、示例配置、产品/平台文档** | 保持本仓库 **「授权 SDK + 契约资产」** 为一等公民;**商业交付平台**(Spring Boot 4.0. + Vue)**不宜**与 JNI/native 强耦在同一 Maven 树内混建 |
|
||||
| **构建** | `java/` Maven 多模块;`native/` CMake 动态库 | CI **双轨**:Java 与 Native 可并行;平台后端/前端 **独立仓库或独立根级目录** 时再挂接新 workflow |
|
||||
| **文档** | `docs/` 已覆盖比特规则、Callback、创飞平台 BPM、模块、权限 | 文档继续集中在 `docs/`;**工程边界**以本文 + `engineering/` 为 **单一事实来源(SSOT)** |
|
||||
| **缺口** | 根目录无 README;平台 Webhook、管理端未在代码层体现 | 用 `**engineering/planned/`** 占位说明 **推荐独立仓库名与技术栈**;实现阶段按 manifest 开仓 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 2. 工作区逻辑分层(C4-L1)
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph WS["本工作区 craftlabs-authorization-sdk"]
|
||||
S[SDK Java API]
|
||||
N[Native craftlabs_auth_bitanswer]
|
||||
SCH[schemas/ craftlabs-auth-config]
|
||||
EX[examples/]
|
||||
DOC[docs/]
|
||||
end
|
||||
|
||||
subgraph EXT["规划中的独立工程(见 engineering/planned)"]
|
||||
WH[license-webhook-ingress]
|
||||
API[delivery-platform-api]
|
||||
UI[delivery-platform-ui]
|
||||
end
|
||||
|
||||
BA[比特安索云/控制台]
|
||||
CLI[现场客户端产品]
|
||||
|
||||
N --> S
|
||||
S --> CLI
|
||||
SCH --> CLI
|
||||
WH -->|POST Callback| BA
|
||||
API -->|读写字段| WH
|
||||
UI --> API
|
||||
DOC -.->|约束| SCH
|
||||
```
|
||||
|
||||
|
||||
|
||||
**原则**:**运行时依赖**从平台 API → Webhook → 比特 为一条链;**客户端**仅依赖 **Maven 发布的 SDK 工件** + **JSON 配置**(校验用 Schema),不依赖平台 UI。
|
||||
|
||||
---
|
||||
|
||||
## 3. 物理目录与职责(当前实现)
|
||||
|
||||
|
||||
| 路径 | 工程类型 | 职责 | 构建命令(摘要) |
|
||||
| ------------------ | -------------- | --------------------------------------------------------------------------------------------------------------- | ---------------------------- |
|
||||
| `**java/`** | Maven `pom` 聚合 | `craftlabs-auth-core`(配置模型/校验/桥接)、`craftlabs-auth-bitanswer`、`craftlabs-auth-selfhosted`、`craftlabs-auth-tests` | `mvn -f java/pom.xml verify` |
|
||||
| `**native/**` | CMake | `libcraftlabs_auth_bitanswer`、JNI、自研 HTTP 占位 | 见 `native/build` 或项目 README |
|
||||
| `**schemas/**` | JSON Schema | `craftlabs-auth-config` 契约,与 `AuthConfigs` 对齐 | 无编译;CI 可 `ajv`/脚本校验 |
|
||||
| `**examples/**` | 样例 | `config/*.json`、`java`/`python` 烟测 | 随测试引用 |
|
||||
| `**docs/**` | 文档 | 产品、比特对接、工程架构 | 无构建 |
|
||||
| `**engineering/**` | **工程元数据** | manifest、**planned** 占位、边界说明 | 无构建 |
|
||||
|
||||
|
||||
**禁止**:在未做迁移方案前,将 **Spring Boot 应用** 塞进 `java/` 下与 `craftlabs-auth-`* 并列 —— 会导致发布周期、依赖(Boot vs 库消费者)冲突。
|
||||
**平台端正确做法**:在 **独立仓库** 内 **多模块开发**,由 **唯一 `bootstrap` 模块** 执行 `spring-boot-maven-plugin` **repackage**,对外只发布 **一枚 Fat JAR**(见 **§5.3**)。
|
||||
|
||||
---
|
||||
|
||||
## 4. Maven 模块边界(SDK 内部)
|
||||
|
||||
```
|
||||
craftlabs-auth-parent
|
||||
├── craftlabs-auth-core # 无第三方授权运行时;配置、NativeBridge 接口
|
||||
├── craftlabs-auth-bitanswer # System.loadLibrary + BitAnswerProvider
|
||||
├── craftlabs-auth-selfhosted
|
||||
└── craftlabs-auth-tests # 集成/配置测试
|
||||
```
|
||||
|
||||
- **对外发布坐标**:以 `cn.craftlabs:craftlabs-auth-*` 为准;版本与 **changelog** 在发布流水线维护。
|
||||
- **平台后端**若需读取同一配置模型:优先 **复制 DTO + 共用 Schema**,或将来抽取 `**craftlabs-auth-config-model` 极小 jar**(另案);**禁止**在平台可执行 JAR 中引入 `craftlabs-auth-bitanswer`(会拉起 JNI/native 期望,属边界错误)。
|
||||
|
||||
---
|
||||
|
||||
## 5. 客户端 SDK 与平台端:深入评估与防混淆
|
||||
|
||||
### 5.1 二者不可混为一谈
|
||||
|
||||
|
||||
| 维度 | **客户端 SDK**(本仓库 `java/` + `native/`) | **平台端后端**(`delivery-platform-api` 等独立工程) |
|
||||
| --------------- | ----------------------------------------- | ---------------------------------------------------------------- |
|
||||
| **运行位置** | 客户现场业务进程 / 边缘 AI 设备 | 创飞机房 / 云(VPC) |
|
||||
| **核心职责** | `Bit_Login`、特征项、本地/云授权运行时 | 合同、交付、SN 台账、Callback 处置、RBAC、报表 |
|
||||
| **典型依赖** | BitAnswer 官方 native + `BitAnswerProvider` | Spring Boot、DB、MQ;**无** BitAnswer 客户端 native |
|
||||
| **交付形态** | 多枚 **薄 JAR** + 各 OS **动态库**(与 JAR 同版本) | **单枚可执行 Fat JAR**(或容器内同等物)**每个可部署服务一枚** |
|
||||
| **Spring Boot** | **不使用**(库代码,避免与宿主应用 Boot 版本冲突) | **使用**(4.0. 线),仅 **启动模块** 打 Fat JAR |
|
||||
| **配置** | `craftlabs-auth-config` JSON + Schema | 平台自有 `application.yml` + **PostgreSQL 15** 数据源;ORM 为 **MyBatis-Plus**;JSON Schema 仅用于 **校验导出的客户端配置**(若实现) |
|
||||
|
||||
|
||||
**硬规则**:平台进程 **不得** `System.loadLibrary("craftlabs_auth_bitanswer")`;不得在服务端 classpath 引入 `**craftlabs-auth-bitanswer`** 模块(除非未来出现「纯 Java、无 native」的只读适配且经架构评审——当前 **不存在**)。
|
||||
|
||||
### 5.2 命名与仓库层面的识别
|
||||
|
||||
- **SDK 坐标**:`cn.craftlabs:craftlabs-auth-*`(artifact 前缀固定,文档与 BOM 中一眼可辨)。
|
||||
- **平台坐标**:建议 `cn.craftlabs.platform:*` 或 `cn.craftlabs.delivery:*`(**禁止**复用 `craftlabs-auth-*` 作为应用模块 artifactId)。
|
||||
- **CI 流水线**:SDK 与 **platform-*** 使用 **不同 job**,产物上传 **不同仓库路径**(Maven `.../sdk/` vs `.../platform/`)。
|
||||
|
||||
### 5.3 单 JAR 部署 vs 分模块开发(平台 / Webhook)
|
||||
|
||||
**诉求**:运维只下发 **一个 `app.jar`**(或镜像内 `java -jar app.jar`);研发仍按 **领域拆分模块**,边界清晰、编译快、测试可隔离。
|
||||
|
||||
**推荐 Maven 形态**(每个 **独立可部署后端** 各自一套父 POM,勿与 SDK 父 POM 合并):
|
||||
|
||||
```
|
||||
delivery-platform/ # 或 license-webhook 同理
|
||||
├── pom.xml # packaging=pom,dependencyManagement
|
||||
├── platform-domain/ # 实体、领域服务接口、无 Spring Web
|
||||
├── platform-application-service/ # 用例、事务边界、调用 domain
|
||||
├── platform-adapters-web/ # REST Controller、DTO 映射
|
||||
├── platform-adapters-persistence/ # MyBatis-Plus Mapper / XML(PostgreSQL 15)
|
||||
└── platform-bootstrap/ # 唯一含 main + spring-boot-maven-plugin
|
||||
└── src/main/java/.../Application.java
|
||||
```
|
||||
|
||||
- **仅 `platform-bootstrap`** 配置 `spring-boot-maven-plugin` 的 `**repackage**`(或 `executable`),依赖其余模块为 **普通 jar**,打进 **Fat JAR / Executable JAR**。
|
||||
- `mvn -pl platform-bootstrap -am package` → 产出 `platform-bootstrap/target/*.jar` **一枚**,即部署单元。
|
||||
- **开发体验**:IDE 打开 **聚合工程**,多模块跳转、分模块单测;**禁止**在多个模块上重复声明 `repackage`(否则出现多枚「可执行」JAR 或依赖错乱)。
|
||||
|
||||
**可选变体**:
|
||||
|
||||
- **分层 jar(Spring Boot 2.3+)**:`layertools` 优化镜像层 —— 仍对应 **单次构建的一条启动入口**。
|
||||
- **Webhook 与 Core API 分开发布**:两个 Maven 工程各产 **一枚** Fat JAR(`webhook-bootstrap.jar`、`platform-bootstrap.jar`),比强行塞进一个进程更符合 **扩容与故障隔离**;若强制单进程,可用 **同一 `bootstrap` 模块多 profile**(一般 **不推荐**,耦合过高)。
|
||||
|
||||
### 5.4 SDK 侧构建(对照:不是 Fat JAR)
|
||||
|
||||
- `craftlabs-auth-core` / `bitanswer` / `selfhosted` 均为 **library jar**,**不打** `spring-boot-maven-plugin`。
|
||||
- 客户端应用(客户自有 Spring Boot 或其它)自行打包 Fat JAR,**声明依赖** `craftlabs-auth-bitanswer` + 携带 **匹配版本 native**。
|
||||
- **平台 Fat JAR** 与 **客户应用 Fat JAR** 是 **两条完全不同的发布线**,不得在平台 POM 里 `dependency` 整条 SDK 父工程。
|
||||
|
||||
### 5.5 评审检查(单 JAR + 分模块)
|
||||
|
||||
- 全仓库是否 **只有一个** 模块声明 `spring-boot-maven-plugin` 的 `repackage`(针对该可部署应用)?
|
||||
- `mvn dependency:tree -pl platform-bootstrap` 中是否 **无** `craftlabs-auth-bitanswer`?
|
||||
- 部署文档是否写清:启动类 FQCN、`java -jar` 与 JVM 参数、**与 SDK 版本无耦合**?
|
||||
|
||||
---
|
||||
|
||||
## 6. Native 边界
|
||||
|
||||
- **产出物**:各平台 `.so` / `.dylib` / `.dll` + 头文件。
|
||||
- **与 Java 契约**:`NativeBridge` 与 `jni_bridge.cpp` 必须 **同版本发布**。
|
||||
- **平台服务**:**不**链接本 native 库;仅 **现场 AI/业务进程** 链接。
|
||||
|
||||
---
|
||||
|
||||
## 7. 规划工程划分(推荐独立 Git 仓库)
|
||||
|
||||
下列目录在 `**engineering/planned/`** 中以 README 描述,**默认新开仓库**(名称可调整):
|
||||
|
||||
|
||||
| 规划 ID | 建议仓库名 | 技术栈(与产品文档对齐) | 与本工作区关系 |
|
||||
| ------------------------- | -------------------------------- | ---------------------------------------- | ------------------------------------------------- |
|
||||
| `license-webhook-ingress` | `craftlabs-license-webhook`(示例) | Spring Boot **4.0.**,仅 Ingress + 验签 + MQ | **消费**比特 Callback;**不**依赖 SDK native |
|
||||
| `delivery-platform-api` | `craftlabs-delivery-platform` | Spring Boot **4.0.**,领域 API、**PostgreSQL 15**、**MyBatis-Plus** | 依赖 **schemas** 可通过 git submodule 或发布 **schema 包** |
|
||||
| `delivery-platform-ui` | `craftlabs-delivery-platform-ui` | Vue 3 + Vite | 调用 `delivery-platform-api` |
|
||||
|
||||
|
||||
**可选 Monorepo**:若公司策略要求单仓,可采用 **Bazel / Gradle composite / 多根 `pom` 父子不包含 SDK** 的目录隔离,例如:
|
||||
|
||||
```
|
||||
mega-repo/
|
||||
craftlabs-authorization-sdk/ # 本仓库 subtree 或 submodule
|
||||
delivery-platform/
|
||||
license-webhook/
|
||||
```
|
||||
|
||||
迁移成本高于 **三仓 + 契约版本化**;**默认推荐三仓**。
|
||||
|
||||
---
|
||||
|
||||
## 8. CI/CD 划分建议
|
||||
|
||||
|
||||
| 组件 | 触发路径 | 产物 |
|
||||
| ----------- | ------------ | ------------------------------------- |
|
||||
| SDK Java | `java/`** | Maven deploy(私服/Central) |
|
||||
| SDK Native | `native/**` | 各 OS 工件 + 与 Java **同版本 tag** |
|
||||
| Schema | `schemas/`** | 可与 SDK 同步发 **minor**;breaking 走 major |
|
||||
| 平台与 Webhook | **独立仓库**(或本仓 `services/`) | **Fat JAR** + 部署说明(`systemd`/脚本/`docker run`);**不强制** 容器与 K8s,规模化后再考虑镜像与编排 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 9. 数据与配置契约
|
||||
|
||||
- **客户端**:`craftlabs-auth-config.schema.json` + 环境 `bitanswer.url` 等(见 `examples/config`)。
|
||||
- **平台**:存储 SN、合同、Callback 等 —— **领域模型独立于 SDK**;仅 **映射表** 与比特特征 ID 与 M6 文档一致。
|
||||
- **Webhook Payload**:以比特官方规则文档为准;平台侧 **反序列化 DTO** 在 `license-webhook` 仓维护。
|
||||
|
||||
### 9.1 平台数据栈(架构锁定)
|
||||
|
||||
| 项 | 约定 |
|
||||
|----|------|
|
||||
| **数据库** | **PostgreSQL 15**(生产、验收、联调基准版本;镜像 `postgres:15`) |
|
||||
| **ORM** | **MyBatis-Plus**(Spring Boot 3 使用 `mybatis-plus-spring-boot3-starter`;升级 Spring Boot 4 时改用官方 `mybatis-plus-spring-boot4-starter` 并回归) |
|
||||
| **迁移** | Flyway 或 Liquibase(后续迭代引入;与表结构变更门禁对齐) |
|
||||
| **单测** | 可不启真实 PG:H2 `MODE=PostgreSQL` 或 Testcontainers `postgres:15`,以团队门禁为准 |
|
||||
|
||||
实现参考:`services/delivery-platform-api` 已接入 MyBatis-Plus + JDBC;本地数据库见 `services/docker-compose.yml`。
|
||||
|
||||
---
|
||||
|
||||
## 10. 安全边界
|
||||
|
||||
> **展开**:威胁面、分组件控制、信任边界图与评审清单见 [SYSTEM_ARCHITECTURE.md §9](./SYSTEM_ARCHITECTURE.md)。
|
||||
|
||||
### 10.1 密钥与凭据
|
||||
|
||||
- **Webhook**:`x-bitanswer-token` / 与比特约定的共享密钥 **仅** 在 **部署机环境变量** 或 **权限受限的本地配置文件**(如 `chmod 600`);**禁止** 写入 Git、镜像层与公开 CI 日志。
|
||||
- **平台数据库**:JDBC URL、用户名、密码 **仅** 注入运行时;`docker-compose` 与示例 **不得** 作为生产凭据模板。
|
||||
- **管理端**:演示账号(如 `dev`/`admin`)**禁止** 用于生产;生产至少 **强口令**。团队尚小时 **不强制** 上云 KMS / Vault;规模与合规要求上来后再演进。
|
||||
- **SDK 发布防篡改**:以 [SYSTEM_ARCHITECTURE §9.8](./SYSTEM_ARCHITECTURE.md) 为准(官方渠道、SHA-256、建议 GPG、同 tag 发布 JAR+Native)。
|
||||
|
||||
### 10.2 运行时与数据面
|
||||
|
||||
- **传输**:对外 **仅 HTTPS**(Webhook、管理 API、浏览器);比特 Callback 终端 **不接明文 HTTP**(除本机健康检查等受控例外)。
|
||||
- **SDK**:配置 JSON **不落** 平台库表作为默认设计;**禁止** 在 `examples/` 与文档示例中放置真实 `bitanswer.url` 密钥或生产 SN。
|
||||
- **服务端 classpath**:**禁止** `craftlabs-auth-bitanswer` 与 `System.loadLibrary` —— 避免将 **客户端攻击面** 引入机房。
|
||||
- **日志与排障**:Callback 正文、Authorization、数据库 URL **默认脱敏或不打**;生产日志外送需合规评估。
|
||||
|
||||
### 10.3 授权与访问控制
|
||||
|
||||
- 管理 API:**认证(谁)** 与 **鉴权(能否操作资源)** 分层;与 **M11** 角色矩阵一致,防范 **越权(IDOR)**。
|
||||
- Webhook:**认证先于重逻辑**;**幂等** 防重放污染;**Body 大小限制** 防 DoS。
|
||||
|
||||
### 10.4 供应链与构建
|
||||
|
||||
- Maven/npm **锁定版本**;力所能及时做 **依赖漏洞扫描**(SCA)。
|
||||
- **SDK 对外发布**:每个版本附带 **SHA-256 清单**,**强烈建议** **GPG 签名**(`maven-gpg-plugin` 或 GitHub signed releases);详见 [SYSTEM_ARCHITECTURE §9.8](./SYSTEM_ARCHITECTURE.md)。
|
||||
|
||||
---
|
||||
|
||||
## 11. 演进检查清单(架构评审用)
|
||||
|
||||
- 新代码是否落在正确 **仓库/目录**(SDK vs 平台 vs Webhook)?
|
||||
- Schema 变更是否 **双向** 更新 Java `AuthConfigs` + 文档?
|
||||
- Native 与 Java **是否同 tag 发布**?
|
||||
- 平台是否 **误引** `craftlabs-auth-bitanswer` 到服务端 classpath?
|
||||
- 平台构建是否 **仅 bootstrap 模块** 产出 Fat JAR,且无重复 `repackage`?
|
||||
- **安全**:Webhook 生产是否 **启用** 共享密钥/签名?Actuator 敏感端点是否 **已收敛**?新接口是否 **默认拒否** 并完成 **鉴权**?日志是否 **无** 明文 Token/Callback?
|
||||
- **安全**:[SYSTEM_ARCHITECTURE §9.7](./SYSTEM_ARCHITECTURE.md) 评审项是否逐项可追溯?
|
||||
- **SDK 发布**:[SYSTEM_ARCHITECTURE §9.8](./SYSTEM_ARCHITECTURE.md) 是否落实 **官方渠道 + 校验和(+ 签名)+ JAR/Native 同 tag**?
|
||||
|
||||
---
|
||||
|
||||
## 12. 修订记录
|
||||
|
||||
|
||||
| 日期 | 说明 |
|
||||
| ---------- | ------------------------------------------------------------------------------------------- |
|
||||
| 2026-04-06 | 初版:工作区走查、目录边界、规划仓库与 CI 划分;落地 `engineering/` manifest 与 `planned/`* 占位。 |
|
||||
| 2026-04-06 | 增补:**§5 客户端 SDK vs 平台端** 防混淆表;**多模块开发 + 单 Fat JAR** 的 Maven 模块划分与 `repackage` 约束;CI 坐标命名建议。 |
|
||||
| 2026-04-06 | 关联:[PARALLEL_ITERATION_INDEX.md](./PARALLEL_ITERATION_INDEX.md) 与 `tracks/01–03` 三轨并行执行包。 |
|
||||
| 2026-04-06 | **§9.1** 锁定平台 **PostgreSQL 15** + **MyBatis-Plus**;`services` 工程对齐依赖与本地 `docker-compose`。 |
|
||||
| 2026-04-06 | 新增汇总文档 [SYSTEM_ARCHITECTURE.md](./SYSTEM_ARCHITECTURE.md)(系统架构图 + 全量组件清单)。 |
|
||||
| 2026-04-06 | **§10** 安全边界扩写(密钥、传输、SDK、鉴权、供应链);**§11** 增补安全评审项;与安全专章 [SYSTEM_ARCHITECTURE §9](./SYSTEM_ARCHITECTURE.md) 交叉引用。 |
|
||||
| 2026-04-06 | **小团队假设**:凭据以宿主机环境变量/受限文件为主,**不强制** K8s/KMS;**§10.1/10.4** 与 **§11** 对齐 **SDK §9.8** 发布完整性。 |
|
||||
| 2026-04-06 | **§8** CI/CD 表:平台产物以 **Fat JAR + 部署说明** 为主,**不强制** K8s。 |
|
||||
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
# 轨道 A:平台 API + License Webhook 后端 — 并行实施包
|
||||
|
||||
> **对齐**:[BPM 排期 §7](../chuangfei-platform-bpm-and-roadmap.md) · [工程布局 §5](../WORKSPACE_ENGINEERING_LAYOUT.md) · [集成平台 §8](../../chuangfei-bitanswer-integration-platform.md)
|
||||
> **约束**:Spring Boot **4.0.x**;Maven **多模块**;**仅 `*-bootstrap`** `repackage` → **各一枚 Fat JAR**;服务端 **禁止** `craftlabs-auth-bitanswer`;数据层 **PostgreSQL 15** + **MyBatis-Plus**(见 [WORKSPACE_ENGINEERING_LAYOUT.md §9.1](../WORKSPACE_ENGINEERING_LAYOUT.md))。
|
||||
|
||||
---
|
||||
|
||||
## 0. 并行执行总览
|
||||
|
||||
| 维度 | 说明 |
|
||||
|------|------|
|
||||
| **两条可部署线** | `delivery-platform-api` 与 `license-webhook` **同一日历迭代并行**,各产 **一枚 Fat JAR**。 |
|
||||
| **对齐机制** | **契约 Owner**(事件 schema、`Idempotency-Key`、错误码);共享 **OpenAPI / 事件 README**;**I5 起** 集成测试门禁。 |
|
||||
| **I1~I4 Webhook** | 可先 **验签、幂等、观测、占位路由**;生产级持久化 + M5 台账对齐在 **I5**。 |
|
||||
|
||||
---
|
||||
|
||||
## 1. 仓库与模块骨架
|
||||
|
||||
### 1.1 双仓库(推荐)
|
||||
|
||||
| 仓库(示例名) | 产出 |
|
||||
|----------------|------|
|
||||
| `craftlabs-delivery-platform` | `platform-bootstrap-*.jar` |
|
||||
| `craftlabs-license-webhook` | `webhook-bootstrap-*.jar` |
|
||||
|
||||
### 1.2 `delivery-platform` 模块示例
|
||||
|
||||
```
|
||||
delivery-platform/
|
||||
├── pom.xml
|
||||
├── platform-domain/
|
||||
├── platform-application/
|
||||
├── platform-adapters-web/
|
||||
├── platform-adapters-persistence/
|
||||
└── platform-bootstrap/ # 唯一 main + repackage
|
||||
```
|
||||
|
||||
包名建议:`cn.craftlabs.platform.{identity,customer,contract,delivery,licensing,audit,config,...}`。
|
||||
|
||||
### 1.3 `license-webhook` 模块示例
|
||||
|
||||
```
|
||||
license-webhook/
|
||||
├── pom.xml
|
||||
├── webhook-domain/
|
||||
├── webhook-application/
|
||||
├── webhook-adapters-http/
|
||||
├── webhook-adapters-integration/
|
||||
└── webhook-bootstrap/
|
||||
```
|
||||
|
||||
包名建议:`cn.craftlabs.webhook.*`。
|
||||
|
||||
---
|
||||
|
||||
## 2. 分迭代后端 Backlog(I1~I6)
|
||||
|
||||
| 迭代 | 平台:模块 | 平台:REST/领域 | 平台:DB | Webhook:范围 | 集成点 | DoD |
|
||||
|------|------------|-----------------|----------|---------------|--------|-----|
|
||||
| **I1** | domain/application/adapters-web/persistence/bootstrap | M11 登录/登出/会话、登录审计、粗 RBAC、OpenAPI 初版 | 用户、角色、会话、登录审计 | 脚手架、CI、`/health`、Callback 占位、`Idempotency-Key` 记录 | 无强依赖 | 平台 Fat JAR;`dependency:tree` 无 bitanswer;Webhook Fat JAR CI 绿 |
|
||||
| **I2** | +M1 | 客户/项目 CRUD、字典、用户角色分配 API | 客户、项目、字典 | 验签配置、拒绝非法请求指标 | 字典编码与前端约定 | M1 API 与鉴权打通;验签可 curl 演示 |
|
||||
| **I3** | 加重 persistence | M2 合同+行项、状态机;M10-F01 | 合同、行、变更日志 | 事件 DTO 规范化、与平台枚举对齐;可 Mock DB | 契约:合同/行 id 供 Callback 关联 | 状态机单测;事件 schema v0.1 归档 |
|
||||
| **I4** | | M3 交付;M4 SN 录入/绑定/状态/手工回写 | 交付、SN、FK | 关联键策略、MQ producer 骨架可选 | 内部 API 或 MQ 方案 ADR | 交付+SN 主键链路可追溯 |
|
||||
| **I5** | | M5 Inbox P0;M6 环境+产品线最小 | Inbox 唯一约束、M6 表 | 验签→幂等落库/入队→平台可见 | 比特 Dev 联调 | E2E:模拟 Callback → 平台 DB 一条 Inbox |
|
||||
| **I6** | bootstrap 横切 | 加固、Runbook、UAT 缺陷 | 修复类迁移 | Ingress 加固、密钥轮换演练 | 全链路 BP-01~06、11 | UAT 签字;两 JAR 版本可追踪 |
|
||||
|
||||
### 并行分工小结
|
||||
|
||||
| 迭代 | 平台关键路径 | Webhook 关键路径 |
|
||||
|------|--------------|------------------|
|
||||
| I1~I2 | 身份 + 主数据 | Ingress + 验签 + 契约草稿 |
|
||||
| I3~I4 | 合同/交付/SN + 审计 | 事件模型 + 投递骨架 |
|
||||
| I5~I6 | Inbox + M6 | 真实链路 + 运维 |
|
||||
|
||||
---
|
||||
|
||||
## 3. Webhook ↔ 平台契约要点
|
||||
|
||||
- **版本**:`schemaVersion` 或 `X-Event-Schema-Version`。
|
||||
- **幂等**:`Idempotency-Key` + 比特稳定 `message_id`;Inbox 表 `(source_system, external_message_id)` 唯一。
|
||||
- **投递**:A) Webhook **HTTP** `POST /internal/v1/callback-events`;B) **MQ** + 平台消费者(MVP 需 I5 定案)。
|
||||
- **响应**:对比特 **2xx** 须在持久化或可靠入队**之后**。
|
||||
- **安全**:验签用平台侧实现;**禁止** JNI SDK。
|
||||
- **观测**:`traceparent` / `X-Request-Id` 贯通。
|
||||
|
||||
---
|
||||
|
||||
## 4. 风险与对前端/SDK
|
||||
|
||||
| 风险 | 缓解 |
|
||||
|------|------|
|
||||
| 契约漂移 | I3 起 OpenAPI SSOT;fixture 入库 |
|
||||
| 幂等与 UX | DB 唯一约束;前端按业务 id 去重 |
|
||||
| I5 前 Webhook 空转 | I1~I4 以契约+假实现为主 |
|
||||
| SDK 误用 POM | CI `dependency:tree` grep |
|
||||
| 前端滞后 | I5 起 Postman/Scalar 先行验收 |
|
||||
|
||||
---
|
||||
|
||||
## 5. CI Jobs 建议
|
||||
|
||||
| Job | 步骤摘要 |
|
||||
|-----|----------|
|
||||
| `platform-build` | `mvn -pl platform-bootstrap -am verify`;可选禁止 `craftlabs-auth-bitanswer` |
|
||||
| `webhook-build` | 同上 `webhook-bootstrap` |
|
||||
| `platform-integration-test` | Testcontainers + Flyway;I5+ Mock Callback 全链路 |
|
||||
| `cross-service-it`(I5+) | Compose:双 JAR + DB + MQ |
|
||||
|
||||
---
|
||||
|
||||
## 6. V1.1(I7~I8)
|
||||
|
||||
| 迭代 | 平台 | Webhook |
|
||||
|------|------|---------|
|
||||
| I7 | 按钮级权限码、导出脱敏、限流、安全头 | 速率限制、payload 上限 |
|
||||
| I8 | 业务指标 RED、批量导入幂等 | Callback 失败率、DLQ 深度 |
|
||||
|
||||
---
|
||||
|
||||
## 7. Mid(I9~I13)与 V2.0
|
||||
|
||||
- **Mid**:M7 设备;M8 待办/通知;M9 报表;M11 SSO/并发/强制下线;M2 变更可选 I13。
|
||||
- **V2.0**:M10 举证包;MFA、SECURITY_ADMIN、数据范围;CRM、读模型/CQRS 轻量。
|
||||
|
||||
---
|
||||
|
||||
## 8. 修订记录
|
||||
|
||||
| 日期 | 说明 |
|
||||
|------|------|
|
||||
| 2026-04-06 | 由并行 Task 产出并入库;与 Roadmap I1~I6 对齐。 |
|
||||
@@ -0,0 +1,85 @@
|
||||
# 轨道 B:delivery-platform-ui(Vue 3)— 并行实施包
|
||||
|
||||
> **对齐**:[BPM 排期 §7](../chuangfei-platform-bpm-and-roadmap.md) · [功能模块 M1–M11](../../chuangfei-platform-product-modules.md) · [并行索引](../PARALLEL_ITERATION_INDEX.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. 技术基线
|
||||
|
||||
| 项 | 选型 |
|
||||
|----|------|
|
||||
| 运行时 | **Vue 3** + **Vite**,Composition API + `<script setup>` |
|
||||
| 状态 | **Pinia** |
|
||||
| 路由 | **vue-router**(懒加载、meta:权限码、`title`) |
|
||||
| HTTP | **axios**(拦截器:JWT Bearer 或 Session Cookie) |
|
||||
| UI | **Element Plus** |
|
||||
| 契约(可选) | OpenAPI → TS 类型,与后端 **contract-first** |
|
||||
|
||||
认证:环境切换 `withCredentials` 与 `Authorization`;登录后写入 Pinia。
|
||||
|
||||
---
|
||||
|
||||
## 2. I1~I6 前端 Backlog
|
||||
|
||||
| 迭代 | 路由/页面 | 关键组件 | API/状态 | E2E | DoD |
|
||||
|------|-----------|----------|----------|-----|-----|
|
||||
| **I1** | `/login`、`/` 布局、`/403`/`/404` | `AppLayout`、`LoginForm`、`IdleTimeout` | auth/user store;401 统一处理 | P0 登录与回跳 | RBAC 路由守卫;菜单按权限过滤 |
|
||||
| **I2** | `/customers`、`/projects` 及详情;`/admin/dictionaries` | `DataTable`、`CustomerForm`、`ProjectForm` | CRUD + 字典缓存 | P0 客户→项目 | 与 M1 P0 字段一致 |
|
||||
| **I3** | `/contracts`、新建向导、`/contracts/:id` | `ContractWizard`、`ContractLineEditor`、`StatusTag` | 状态机由后端校验,前端禁用非法操作 | P0 草稿→生效 | M2 P0;M10-F01 入口 |
|
||||
| **I4** | `/deliveries`、`/licenses/sn`、导入 | `DeliveryBatchForm`、`SnBindDialog`、`SnStatusTimeline` | 交付与合同行;孤儿 SN 警告 | P0 交付→SN→回写 | M3/M4 P0 |
|
||||
| **I5** | `/callbacks`、`/integration/environments`、`product-lines` | `CallbackInboxTable`、`CallbackPayloadViewer`(脱敏) | Inbox 处置;M6 只读/受限写 | P0 列表→详情→状态 | 与 Webhook 联调或 staging |
|
||||
| **I6** | 全链路导航与修缺陷 | 可选 `GlobalSearch` | 错误与空态统一 | P0 **BP-01~06+11** 全链路 E2E | UAT 无 P0;手册截图一致 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 页面 ↔ 模块(摘要)
|
||||
|
||||
| 模块 | 典型路由 | MVP 迭代 |
|
||||
|------|----------|----------|
|
||||
| M11 | 登录、用户/角色(I2)、Mid SSO | I1、Mid |
|
||||
| M1 | 客户、项目 | I2 |
|
||||
| M2 | 合同 | I3 |
|
||||
| M3/M4 | 交付、SN | I4 |
|
||||
| M5/M6 | Callback、集成配置 | I5 |
|
||||
| M7~M9 | 设备、待办、报表 | Mid |
|
||||
| M10 | 审计展示/导出 | I3+ / Mid / V2 |
|
||||
|
||||
---
|
||||
|
||||
## 4. Mock 与契约先行
|
||||
|
||||
| 工作包 | 可先 mock? | 建议 |
|
||||
|--------|-------------|------|
|
||||
| I1 壳层 + RBAC | ✅ | MSW / vite-plugin-mock |
|
||||
| M1 CRUD | ✅ | I3 前客户/项目 DTO 冻结 |
|
||||
| M2 合同 | ⚠️ | 状态迁移 **OpenAPI 冻结**(I2 末) |
|
||||
| M3/M4 | ⚠️ | 门禁与 M11-F20 契约先行 |
|
||||
| M5/M6 | ⚠️ | Payload 以 Webhook/API DTO 为准 |
|
||||
|
||||
**契约顺序**:Auth → Customer/Project → Contract → Delivery/SN → Callback/Integration。
|
||||
|
||||
---
|
||||
|
||||
## 5. V1.1 / Mid / V2.0(摘要)
|
||||
|
||||
- **I7~I8**:按钮级 `v-permission`;导出脱敏;运维只读仪表盘;批量导入进度。
|
||||
- **Mid I9~I13**:设备/换机;待办与通知配置;对账与 Callback 报表;**SSO**(`/oauth/callback` 等);合同变更对比可选。
|
||||
- **V2.0**:M10 导出包、MFA、SECURITY_ADMIN、数据范围、CRM 同步状态页。
|
||||
|
||||
---
|
||||
|
||||
## 6. E2E 建议
|
||||
|
||||
| 层级 | 工具向 |
|
||||
|------|--------|
|
||||
| Smoke | Playwright / Cypress:登录 + 各迭代主路由 |
|
||||
| P0 业务 | I6 全链路 + V1.1 导入导出 |
|
||||
| Mid | SSO、待办、报表(staging IdP 或 mock OIDC) |
|
||||
|
||||
---
|
||||
|
||||
## 7. 修订记录
|
||||
|
||||
| 日期 | 说明 |
|
||||
|------|------|
|
||||
| 2026-04-06 | 由并行 Task 产出并入库。 |
|
||||
@@ -0,0 +1,92 @@
|
||||
# 轨道 C:craftlabs-authorization-sdk(客户端)— 并行实施包
|
||||
|
||||
> **对齐**:[BPM §7 BP-10](../chuangfei-platform-bpm-and-roadmap.md) · [工程布局 §5](../WORKSPACE_ENGINEERING_LAYOUT.md)
|
||||
> **事实**:`craftlabs-auth-core` / `bitanswer` / `selfhosted`;`schemas/`;`examples/`;平台 **不嵌入** Native。
|
||||
|
||||
---
|
||||
|
||||
## 1. SDK 版本线与 Native 标签
|
||||
|
||||
|
||||
| 原则 | 说明 |
|
||||
| ------------- | ---------------------------------------------------------------- |
|
||||
| **独立 SemVer** | SDK **不与**平台 Fat JAR 版本号绑定;对外话术分两条线。 |
|
||||
| **MAJOR** | Schema 不兼容、公共 API 破坏、JNI 契约不兼容。 |
|
||||
| **MINOR** | 向后兼容扩展:可选 Schema 字段、新 API、新示例。 |
|
||||
| **PATCH** | Bugfix、文档;无契约变化。 |
|
||||
| **预发布** | `-rc.N` 与平台 UAT/比特联调对齐;**不用**平台版本代替 SDK 版本。 |
|
||||
| **Native** | 每次发行 **JAR + 各 OS native** 同版本;Git **单 tag**(如 `v1.4.2`);禁止只升其一。 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 2. 平台迭代 × SDK 工作对照
|
||||
|
||||
|
||||
| 迭代 | 平台焦点 | SDK **必需** | SDK **非阻塞** |
|
||||
| ------ | ------------------- | ------------------------------------------ | ---------------------- |
|
||||
| **I1** | M11 脚手架 | 无 | 文档:与平台产物区分 |
|
||||
| **I2** | M1 | 无 | 文档 |
|
||||
| **I3** | M2、M10-F01 | 无 | 文档 |
|
||||
| **I4** | M3、M4、激活回写 | 烟测路径下 **推荐 PATCH** 修缺陷 | 文档/示例与 BP-10 口径 |
|
||||
| **I5** | M5、M6、Webhook、BP-10 | **Schema + `AuthConfigs` + examples 同步** | Native 与 Webhook 无关 |
|
||||
| **I6** | UAT | **冻结 SDK 版本**、CHANGELOG、**BitAnswer 兼容矩阵** | 禁止 UAT 周做 MAJOR Schema |
|
||||
|
||||
|
||||
**小结**:I1~I4 以文档/示例为主;**I5 起** Schema/Java/示例为硬交付;**I6** 冻结与清单。
|
||||
|
||||
---
|
||||
|
||||
## 3. BP-10:何时 bump Schema / Java / 文档 / 示例
|
||||
|
||||
|
||||
| 变更类型 | Schema | Java AuthConfigs | docs | examples |
|
||||
| ------------------- | ------------------- | ---------------- | ---- | -------- |
|
||||
| 新增可选字段 | MINOR(或 PATCH) | 同交付对齐 | 字段说明 | 可选示例 |
|
||||
| 新增必填/收紧/改名 | MAJOR 或 breaking 策略 | 必须同步 | 迁移说明 | 必须更新模板 |
|
||||
| 仅 description | PATCH | 通常无 | 可选 | 可选 |
|
||||
| M6 仅改发布流程、JSON 形态不变 | 无 | 无 | 手册可选 | 无 |
|
||||
|
||||
|
||||
**硬规则**:影响「平台导出 → Schema → 客户端」任一环的变更,**同一发布列车** 更新 Schema + Java(若有)+ 示例。
|
||||
|
||||
---
|
||||
|
||||
## 4. SDK 发布检查清单(非平台 Fat JAR)
|
||||
|
||||
1. `mvn -f java/pom.xml clean verify`;Native 各 OS 构建通过。
|
||||
2. `mvn deploy`:`craftlabs-auth-*` **版本一致**;**无** `spring-boot-maven-plugin` repackage。
|
||||
3. Native 与 JAR **同版本** 发布。
|
||||
4. Schema + examples CI 校验。
|
||||
5. CHANGELOG:破坏性变更、BitAnswer 版本区间、已知平台导出版本(若可公开)。
|
||||
6. **兼容矩阵**:SDK 版本、厂商库、OS/JDK;与平台应用版本 **分列**。
|
||||
7. Git tag;**不含** `java -jar platform.jar` 说明。
|
||||
|
||||
---
|
||||
|
||||
## 5. V1.1+ SDK 增强(规划)
|
||||
|
||||
|
||||
| 主题 | 说明 |
|
||||
| --------------------- | ---------------------------------------- |
|
||||
| 更严校验 | CI 对 examples 与 Schema 双向校验;平台脱敏 fixture |
|
||||
| Fixtures | 最小/完整/非法 JSON 绑定 Schema 版本 |
|
||||
| 可选 `config-model` 薄模块 | 供平台后端复用 POJO **无 native**;另案评审 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 6. 防混淆话术
|
||||
|
||||
**SDK** = `craftlabs-auth-*` **库** + **Native** + Schema/示例;**平台** = 独立仓 **bootstrap Fat JAR**,无 BitAnswer Native,**版本号线独立**。并行以 **I5(BP-10)** 为契约首要对齐点,**I6** 为 SDK 冻结点。
|
||||
|
||||
---
|
||||
|
||||
## 7. 修订记录
|
||||
|
||||
|
||||
| 日期 | 说明 |
|
||||
| ---------- | --------------- |
|
||||
| 2026-04-06 | 由并行 Task 产出并入库。 |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user