feat: 适配管理端系统 API 与管理员保护 #67

Closed
opened 2026-08-26 17:18:03 +08:00 by ila · 5 comments
Owner

基本信息

  • 类型:功能 / 权限安全 / 后端适配
  • 所属 Epic:#3
  • 所属 MVP / 版本:#35 / MVP-2 后续可用性优化
  • 阶段:已完成
  • 前置工单:#66
  • 设计证据:prototypes/59/v1/index.html,v1,用户于 2026-08-26 确认通过

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-25;生产实施确认:2026-08-26
  • 脱敏摘要:启用适合 Chorus 的 go-admin 管理员、角色、菜单、接口和登录日志模块,但不得恢复无关模块或产生危险默认行为。

目标

把现有 go-admin 系统 API 适配为 Chorus 的最小管理边界:管理员账号与角色可受控维护,菜单、接口、登录日志只读,并在后端强制当前账号、最后一个管理员和内置角色保护。

已确认方案

  • 管理员账号去除部门、岗位、字典/参数依赖,只保留账号、昵称、状态、角色和密码管理所需字段。
  • 后端拒绝删除或停用当前登录管理员,拒绝删除或停用最后一个有效管理员。
  • 内置 chorus_operator 不得改名、删除或停用;允许在受控边界内调整菜单授权。
  • 菜单和接口路由只保留 GET;登录日志只保留 GET,不提供 DELETE。
  • 保护规则在 service/handler 层强制,不仅依赖前端隐藏按钮。
  • 错误使用稳定错误码与可定位信息,不返回密码、JWT、请求参数或敏感审计内容。

非目标

  • 不实现部门、岗位、字典、参数、操作日志或数据权限。
  • 不修改终端用户 users 认证。
  • 不修改 migration 或 Admin UI。
  • 不创建、重置或输出任何真实管理员凭据。

验收标准

  • 管理员列表/详情/创建/编辑/状态/密码操作不依赖部门、岗位或字典接口。
  • 当前管理员和最后一个有效管理员保护有后端单元测试。
  • chorus_operator 改名、删除、停用保护有后端单元测试。
  • 菜单、接口、登录日志写路由不可达,GET 仍受 JWT/Casbin 保护。
  • Admin Go 测试和必要路由安全测试通过。
  • 错误、日志和响应不泄露凭据或请求正文。

风险与回退

  • 风险:保护实现错误可能锁死管理端或意外开放写权限。
  • 回退:按提交回退后恢复原系统 API;若与 #66 联合回退,先回退 UI/后端再执行 migration down。

文档影响

管理员安全边界和只读系统模块属于长期业务/安全规则,需要更新 Architecture-and-Code-Map、Business-Rules-and-Glossary 和必要排错说明。

## 基本信息 - 类型:功能 / 权限安全 / 后端适配 - 所属 Epic:#3 - 所属 MVP / 版本:#35 / MVP-2 后续可用性优化 - 阶段:已完成 - 前置工单:#66 - 设计证据:`prototypes/59/v1/index.html`,v1,用户于 2026-08-26 确认通过 ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-25;生产实施确认:2026-08-26 - 脱敏摘要:启用适合 Chorus 的 go-admin 管理员、角色、菜单、接口和登录日志模块,但不得恢复无关模块或产生危险默认行为。 ## 目标 把现有 go-admin 系统 API 适配为 Chorus 的最小管理边界:管理员账号与角色可受控维护,菜单、接口、登录日志只读,并在后端强制当前账号、最后一个管理员和内置角色保护。 ## 已确认方案 - 管理员账号去除部门、岗位、字典/参数依赖,只保留账号、昵称、状态、角色和密码管理所需字段。 - 后端拒绝删除或停用当前登录管理员,拒绝删除或停用最后一个有效管理员。 - 内置 `chorus_operator` 不得改名、删除或停用;允许在受控边界内调整菜单授权。 - 菜单和接口路由只保留 GET;登录日志只保留 GET,不提供 DELETE。 - 保护规则在 service/handler 层强制,不仅依赖前端隐藏按钮。 - 错误使用稳定错误码与可定位信息,不返回密码、JWT、请求参数或敏感审计内容。 ## 非目标 - 不实现部门、岗位、字典、参数、操作日志或数据权限。 - 不修改终端用户 `users` 认证。 - 不修改 migration 或 Admin UI。 - 不创建、重置或输出任何真实管理员凭据。 ## 验收标准 - [x] 管理员列表/详情/创建/编辑/状态/密码操作不依赖部门、岗位或字典接口。 - [x] 当前管理员和最后一个有效管理员保护有后端单元测试。 - [x] `chorus_operator` 改名、删除、停用保护有后端单元测试。 - [x] 菜单、接口、登录日志写路由不可达,GET 仍受 JWT/Casbin 保护。 - [x] Admin Go 测试和必要路由安全测试通过。 - [x] 错误、日志和响应不泄露凭据或请求正文。 ## 风险与回退 - 风险:保护实现错误可能锁死管理端或意外开放写权限。 - 回退:按提交回退后恢复原系统 API;若与 #66 联合回退,先回退 UI/后端再执行 migration down。 ## 文档影响 管理员安全边界和只读系统模块属于长期业务/安全规则,需要更新 Architecture-and-Code-Map、Business-Rules-and-Glossary 和必要排错说明。
Author
Owner

2026-08-26 开始实施。已核对前置工单 #66 已验收;当前工作区存在与本工单无关的本地配置和截图改动,将保留且不纳入提交。代码知识图谱工具在当前会话不可用,按仓库规则回退到 rg 和定点文件读取。

2026-08-26 开始实施。已核对前置工单 #66 已验收;当前工作区存在与本工单无关的本地配置和截图改动,将保留且不纳入提交。代码知识图谱工具在当前会话不可用,按仓库规则回退到 `rg` 和定点文件读取。
Author
Owner

实施完成,待验收(2026-08-26)

  • 实现提交:3898aae
  • 完成管理员账号最小字段适配、当前管理员/最后一个有效管理员保护、内置 chorus_operator 保护。
  • 菜单、接口、登录日志写路由已移除,GET 继续受 JWT/Casbin 保护。
  • Admin Go 全量测试、路由安全测试、go vet ./...、go build ./... 均通过。
  • 任务归档:Wiki Task-67-适配管理端系统-API-与管理员保护,revision a6088a4bc2d140b1bdd68ef75ae9443aeac2970b。
  • 未调用真实 Provider;未提交本地配置、截图或凭据。

当前阶段:待验收。用户明确验收前保持工单打开。

## 实施完成,待验收(2026-08-26) - 实现提交:`3898aae` - 完成管理员账号最小字段适配、当前管理员/最后一个有效管理员保护、内置 `chorus_operator` 保护。 - 菜单、接口、登录日志写路由已移除,GET 继续受 JWT/Casbin 保护。 - Admin Go 全量测试、路由安全测试、`go vet ./...`、`go build ./...` 均通过。 - 任务归档:Wiki `Task-67-适配管理端系统-API-与管理员保护`,revision `a6088a4bc2d140b1bdd68ef75ae9443aeac2970b`。 - 未调用真实 Provider;未提交本地配置、截图或凭据。 当前阶段:待验收。用户明确验收前保持工单打开。
Author
Owner

2026-08-27 真实本地运行验收发现:GET /api/v1/menu 在预加载 SysApi 时生成错误列名 sys_menu_api_rule.sys_menu_menu_id,与 migration 管理的实际字段 menu_id 不一致。“菜单结构”页面因此显示接口错误。工单恢复为进行中,GET 验收项重新打开;写路由保护未受影响。

2026-08-27 真实本地运行验收发现:`GET /api/v1/menu` 在预加载 `SysApi` 时生成错误列名 `sys_menu_api_rule.sys_menu_menu_id`,与 migration 管理的实际字段 `menu_id` 不一致。“菜单结构”页面因此显示接口错误。工单恢复为进行中,GET 验收项重新打开;写路由保护未受影响。
Author
Owner

2026-08-27:#71 已用提交 ee4f87d 修复菜单 GET 的多对多连接字段并部署复验。“菜单结构”真实页面已正常加载,工单恢复为待验收。

2026-08-27:#71 已用提交 `ee4f87d` 修复菜单 GET 的多对多连接字段并部署复验。“菜单结构”真实页面已正常加载,工单恢复为待验收。
Author
Owner

用户验收通过

  • 验收时间:2026-08-27 14:57:05 +08:00
  • 验收人:用户
  • 结论:用户明确确认本工单通过验收,接受当前实现、部署与已记录的验证结果。
  • 文档:沿用工单中已经完成的 Wiki/镜像处理;没有新的长期事实变化。
  • 状态:已完成,关闭工单。
## 用户验收通过 - 验收时间:2026-08-27 14:57:05 +08:00 - 验收人:用户 - 结论:用户明确确认本工单通过验收,接受当前实现、部署与已记录的验证结果。 - 文档:沿用工单中已经完成的 Wiki/镜像处理;没有新的长期事实变化。 - 状态:已完成,关闭工单。
ila closed this issue 2026-08-27 14:57:22 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/chorus#67