diff --git a/superpowers/specs/2026-06-07-sys-app-management-design.md b/superpowers/specs/2026-06-07-sys-app-management-design.md index 8966c1c..defb737 100644 --- a/superpowers/specs/2026-06-07-sys-app-management-design.md +++ b/superpowers/specs/2026-06-07-sys-app-management-design.md @@ -34,8 +34,8 @@ 1. **多租户隔离**:通过 `owner_type` + `tenant_id` 双重区分 2. **凭证集中管理**:一个 `SysApp` 记录 = 一个第三方应用在本系统的接入凭证 3. **缓存优先**:高频读取走 Redis,CRUD 操作失效缓存 -4. **证书与文本分离**:每个凭证字段分 `_text` 和 `_file_path` 两个列,使用方按业务实际选用(写入时只填其中一个) -5. **兼容现有 `AppProperties`**:`AppProperties` 仍作为通用 POJO 留在 `rui-common-core`,但实际数据从 DB 加载后映射到 `AppProperties` +4. **简单文本用列 / 多证书用 JSON**:简单凭证(app_id、app_secret、app_key、aes_key)直接用 VARCHAR 列;多证书场景(如支付宝 p12 包含 private_key+public_key+证书链)用 JSON 数组存,每项含 `name/path/password` +5. **兼容现有 `AppProperties`**:`AppProperties` 仍作为通用 POJO 留在 `rui-common-core`,但实际数据从 DB 加载后映射到 `AppProperties`(简单字段直接映射;`certificates` 数组由调用方单独处理) 6. **加密占位**:预留 `is_encrypted` 字段,暂不实现 AES 加密逻辑 --- @@ -51,18 +51,13 @@ CREATE TABLE sys_app ( owner_type VARCHAR(20) NOT NULL COMMENT '所有者类型 PLATFORM/TENANT', platform VARCHAR(50) NOT NULL COMMENT '平台编码 wechat/alipay/stripe', name VARCHAR(100) NOT NULL COMMENT '管理用名称', - -- 凭证:app_id / app_secret(证书/文本二选一) + -- 凭证:app_id / app_secret / app_key app_id VARCHAR(200) DEFAULT NULL COMMENT '应用ID', - app_secret_text VARCHAR(500) DEFAULT NULL COMMENT '文本型应用密钥', - app_secret_file_path VARCHAR(500) DEFAULT NULL COMMENT '证书型应用密钥路径', - -- 凭证:app_key + app_secret VARCHAR(500) DEFAULT NULL COMMENT '应用密钥', app_key VARCHAR(200) DEFAULT NULL COMMENT '应用Key(部分平台如支付宝)', - -- 凭证:private_key(证书/文本二选一) - private_key_text TEXT DEFAULT NULL COMMENT '文本型私钥', - private_key_file_path VARCHAR(500) DEFAULT NULL COMMENT '证书型私钥路径', - -- 凭证:public_key(证书/文本二选一) - public_key_text TEXT DEFAULT NULL COMMENT '文本型公钥', - public_key_file_path VARCHAR(500) DEFAULT NULL COMMENT '证书型公钥路径', + -- 多证书:支付宝 p12 等含 private_key+public_key+证书链的复合证书 + -- 每项:{name, path, password},path 存对象存储相对路径 + certificates JSON DEFAULT NULL COMMENT '多证书列表(p12等复合证书)', -- 应用自定义 AES key aes_key VARCHAR(100) DEFAULT NULL COMMENT '应用AES对称密钥(16/24/32字节)', -- 通用 @@ -229,7 +224,7 @@ com.rui.common.oauth2.cache/ ## 8. 安全考虑 -1. **脱敏返回**:`SysAppDTO` 中 `app_secret_text` 返回 `******`,详情接口需要 `*:*:app:detail` 权限 +1. **脱敏返回**:`SysAppDTO` 中 `app_secret` 返回 `******`,详情接口需要 `*:*:app:detail` 权限 2. **审计日志**:所有 CRUD 写操作记录操作人 3. **加密占位**:`is_encrypted` 字段保留,后续接入 AES 时只改 service 层 4. **租户越权防护**:CRUD 接口根据当前用户 tenantId 过滤;非超管只能操作 `tenant_id=current` 的记录