fix: 规范化管理端 API Key 幂等撤销时间响应 #52

Closed
opened 2026-08-25 10:52:39 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:缺陷
  • 所属 Epic:#3
  • 所属 MVP / 版本:#35 / MVP-2
  • 来源集成验收:#47
  • 阶段:已完成

原始需求

  • 来源:执行 #47 的 MySQL 8 跨模块集成验收
  • 提出时间:2026-08-25
  • 脱敏摘要:管理端首次撤销 API Key 后直接返回内存中的纳秒时间,重复撤销从 MySQL datetime(6) 读取微秒时间,造成幂等响应的时间字段不一致。

要解决什么

确保首次与重复撤销都返回数据库实际持久化后的时间精度,保持撤销状态和时间字段幂等一致。

做什么 / 不做什么

  • 做:首次更新成功后在同一事务、同一行锁范围内重新读取 API Key 元数据,再生成响应;增加或保留 MySQL 幂等撤销回归证据。
  • 不做:修改撤销权限、审计次数、API 字段、数据库结构、Portal 用户撤销逻辑或 UI。

设计证据

  • 复用 #45 已确认的管理端 API Key 撤销契约和 #46 页面设计。
  • 非 UI 缺陷,不需要新增原型。

验收标准

  • 首次与重复管理撤销均返回 200,revoked_at 完全一致。
  • 首次响应中的时间与 MySQL 持久化值一致。
  • 每次请求仍分别写入管理员审计和 API 安全审计,不泄露密钥材料。
  • Admin 单测、MySQL 定向集成测试和 #47 相关回归通过。

风险与回退

最小改动仅增加事务内回读;若回读失败则事务回滚并返回错误。回退该提交不会修改已有数据,但会恢复响应精度不一致问题。

文档影响

  • 无长期文档影响:不改变接口、字段、权限、状态或操作方式,只使响应与既有幂等契约一致。## 实施结果(2026-08-25)

  • 首次撤销写入后在同一事务和行锁范围内回读 API Key 元数据,响应使用 MySQL 实际持久化的微秒精度。

  • 首次与重复撤销的 revoked_at 完全一致;权限、审计次数、字段和数据库结构未改变。

  • 提交:048f3b1(已推送 origin/main)。

验证结果

  • MySQL 8:TestAdminAPIKeyGovernanceMySQL 连续 10 次通过。
  • Admin:go test ./...、go vet ./...、go build . 通过。
  • Race:go test -race -count=1 ./app/chorus 通过。
  • 管理端两类 MySQL 安全/治理定向测试通过,未使用真实 Provider。

待验收

  • 阶段:已完成
  • 无长期文档影响:恢复既有幂等响应契约。
  • Wiki 任务归档 revision:fd2c5a2181cd6079b5d06074eb2f1bf652211769。

人工验收

  • 结果:通过

  • 确认人:用户

  • 确认时间:2026-08-25

  • 验收完成后的 Wiki 任务归档 revision:20d04c6de66ed7427b891c86a8bac54e41ccf4a4。

## 基本信息 - 类型:缺陷 - 所属 Epic:#3 - 所属 MVP / 版本:#35 / MVP-2 - 来源集成验收:#47 - 阶段:已完成 ## 原始需求 - 来源:执行 #47 的 MySQL 8 跨模块集成验收 - 提出时间:2026-08-25 - 脱敏摘要:管理端首次撤销 API Key 后直接返回内存中的纳秒时间,重复撤销从 MySQL `datetime(6)` 读取微秒时间,造成幂等响应的时间字段不一致。 ## 要解决什么 确保首次与重复撤销都返回数据库实际持久化后的时间精度,保持撤销状态和时间字段幂等一致。 ## 做什么 / 不做什么 - 做:首次更新成功后在同一事务、同一行锁范围内重新读取 API Key 元数据,再生成响应;增加或保留 MySQL 幂等撤销回归证据。 - 不做:修改撤销权限、审计次数、API 字段、数据库结构、Portal 用户撤销逻辑或 UI。 ## 设计证据 - 复用 #45 已确认的管理端 API Key 撤销契约和 #46 页面设计。 - 非 UI 缺陷,不需要新增原型。 ## 验收标准 - [x] 首次与重复管理撤销均返回 200,`revoked_at` 完全一致。 - [x] 首次响应中的时间与 MySQL 持久化值一致。 - [x] 每次请求仍分别写入管理员审计和 API 安全审计,不泄露密钥材料。 - [x] Admin 单测、MySQL 定向集成测试和 #47 相关回归通过。 ## 风险与回退 最小改动仅增加事务内回读;若回读失败则事务回滚并返回错误。回退该提交不会修改已有数据,但会恢复响应精度不一致问题。 ## 文档影响 - 无长期文档影响:不改变接口、字段、权限、状态或操作方式,只使响应与既有幂等契约一致。## 实施结果(2026-08-25) - 首次撤销写入后在同一事务和行锁范围内回读 API Key 元数据,响应使用 MySQL 实际持久化的微秒精度。 - 首次与重复撤销的 `revoked_at` 完全一致;权限、审计次数、字段和数据库结构未改变。 - 提交:`048f3b1`(已推送 `origin/main`)。 ## 验证结果 - MySQL 8:`TestAdminAPIKeyGovernanceMySQL` 连续 10 次通过。 - Admin:`go test ./...`、`go vet ./...`、`go build .` 通过。 - Race:`go test -race -count=1 ./app/chorus` 通过。 - 管理端两类 MySQL 安全/治理定向测试通过,未使用真实 Provider。 ## 待验收 - 阶段:已完成 - 无长期文档影响:恢复既有幂等响应契约。 - Wiki 任务归档 revision:`fd2c5a2181cd6079b5d06074eb2f1bf652211769`。 ## 人工验收 - 结果:通过 - 确认人:用户 - 确认时间:2026-08-25 - 验收完成后的 Wiki 任务归档 revision:`20d04c6de66ed7427b891c86a8bac54e41ccf4a4`。
Author
Owner

实施与验证完成,提交 048f3b11d0bc4828f154065601262c405b574e5c,Wiki 归档 fd2c5a2181cd6079b5d06074eb2f1bf652211769。工单保持待验收。

实施与验证完成,提交 `048f3b11d0bc4828f154065601262c405b574e5c`,Wiki 归档 `fd2c5a2181cd6079b5d06074eb2f1bf652211769`。工单保持待验收。
ila closed this issue 2026-08-25 11:19:55 +08:00
Author
Owner

用户已于 2026-08-25 明确验收通过。工单已关闭,Wiki 任务归档已更新为已完成,revision:20d04c6de66ed7427b891c86a8bac54e41ccf4a4。

用户已于 2026-08-25 明确验收通过。工单已关闭,Wiki 任务归档已更新为已完成,revision:`20d04c6de66ed7427b891c86a8bac54e41ccf4a4`。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/chorus#52