diff --git a/qy_lty/.planning/REQUIREMENTS.md b/qy_lty/.planning/REQUIREMENTS.md index 698e6d2..c35d74e 100644 --- a/qy_lty/.planning/REQUIREMENTS.md +++ b/qy_lty/.planning/REQUIREMENTS.md @@ -89,19 +89,22 @@ ## Active(当前 milestone 目标) -**(暂无)** +**Milestone v1.0:通用凭据槽位(APP ID + Access Token)** +启动日期:2026-05-07 +目标:后端提供全局单例凭据存储;管理端可读写;手机端 + 设备端可读取。 -本次 `/gsd-new-project` 是 brownfield 文档化,没有指定新 milestone。 +### 通用凭据槽位(CRED) -下一次启动新功能开发时,请用: +- [ ] **CRED-01** 单例 `CredentialSlot` Django 模型 + 迁移;DB 层强制最多一条记录(`pk=1` 固定主键或单字段唯一约束);含 `app_id`、`access_token`、`updated_at` 字段 +- [ ] **CRED-02** Django Admin 注册:列表态/查看态对 `access_token` 字段脱敏;新增/编辑态可见明文(运营录入需要);隐藏"新增"按钮(强制单例语义) +- [ ] **CRED-03** 管理端 GET `/api/v1/admin/credential-slot/`:admin token 鉴权(`admin_token:{token}` Redis key 体系);返回 `{ app_id, access_token: , updated_at }`,Access Token 仅返回末 4 位脱敏掩码 +- [ ] **CRED-04** 管理端 PUT `/api/v1/admin/credential-slot/`:admin token 鉴权;接受 `{ app_id, access_token }` 全字段覆写更新;空记录场景自动 `get_or_create`;变更写入 `updated_at` +- [ ] **CRED-05** 客户端 GET `/api/credential-slot/`:user token 鉴权(`token:{token}` Redis key 体系,复用 `RedisTokenAuthentication`);**明文**返回 `{ app_id, access_token, updated_at }`(手机端 / 设备端实际调用第三方服务需要) +- [ ] **CRED-06** Access Token 日志过滤:阿里云日志格式化器 / 自定义日志过滤器中识别 `access_token` 字段并脱敏,覆盖 PUT 请求体、admin GET 响应体两条最易泄露路径 -``` -/gsd-new-milestone -``` +### 候选优先级(已转移自 brownfield 文档化阶段,本期不消化) -GSD 会引导你确认 milestone 目标、把新需求加到本段(带 REQ-ID),然后 `/gsd-plan-phase` 拆 phase。 - -**候选优先级**(来自 CONCERNS.md 与项目活动信号,按风险/价值排序,仅供参考): +下面是从 CONCERNS.md 转过来的潜在 milestone 候选,本期 v1.0 不处理,留作下一周期参考: 1. **HIGH** 修复 `ACH-02` 成就条件校验缺失 — 当前任意客户端可主张任意成就 2. **HIGH** 修复 SMS 验证码无频率限制 — 生产 DoS 向量 @@ -135,4 +138,4 @@ GSD 会引导你确认 milestone 目标、把新需求加到本段(带 REQ-ID --- -*Last updated: 2026-05-07 after brownfield documentation pass* +*Last updated: 2026-05-07 启动 Milestone v1.0「通用凭据槽位」*