Files
user-system/.workbuddy/memory/MEMORY.md

8.1 KiB
Raw Blame History

项目长期记忆

项目概况

  • 项目类型用户管理系统UMS
  • 后端Go + internal/ 目录
  • 前端frontend/admin/React 18 + TypeScript + Vite + Ant Design 5

前端技术栈

  • 框架React 18 + TypeScript严格模式
  • 路由React Router 6createBrowserRouter
  • UIAnt Design 5
  • 请求:浏览器原生 fetch自建 lib/http/client.ts
  • 状态React Context仅会话不引入 Redux/Zustand
  • 构建Vite配置文件为 vite.config.js非 .ts

关键架构决策

  • AuthProvider 必须在 RootLayout.tsx 中包裹(在 Router 内部),否则 useNavigate/useLocation 报错
  • access_token 保存在内存auth-session.tsrefresh_token 持久化到 localStorage
  • 401 处理:单次刷新机制 + 并发刷新锁refreshPromise
  • 路由守卫RequireAuthsrc/components/guards/+ RequireAdmin

前后端联调评审机制2026-04-01 建立)

  • 评审流程: docs/processes/FRONTEND_BACKEND_REVIEW.md
  • 检查清单: docs/checklists/FRONTEND_BACKEND_CHECKLIST.md
  • 问题分级: P04h修复、P1当天、P2本周、P3下Sprint
  • 通过标准: 所有 P0/P1 已解决,测试通过率 ≥ 95%

前端状态(截至 2026-04-02

  • 全部 13 个页面已实现构建通过5/5 单元测试通过
  • 未实现:批量操作、系统设置页、全局设备管理页、管理员管理页、登录日志导出
  • ⚠️ 半接线:设备信任链路(密码登录传 device_id但前端为随机值邮箱/SMS登录不带设备信息

PRD 缺口状态(截至 2026-04-02 Sprint 14 后)

  • GAP-01角色继承 已确认完整实现(循环检测+深度限制+middleware权限汇总
  • GAP-02SMS密码重置 已完整修复(时序泄漏 + 密码历史 + doResetPassword
  • GAP-03设备信任 全链路闭环(密码/SMS/邮件验证码登录均接 device_id + localStorage持久化
  • GAP-04CAS/SAML SSO PRD 标注"可选",推迟 v2.0
  • GAP-05异常检测 AnomalyDetector 已在 main.go 接线
  • GAP-07SDK 推迟 v2.0
  • 密码历史记录: ChangePassword + doResetPassword 均已接线

代码审查状态最新2026-04-12 全面升级 v4.0

  • 综合评分🟡 7.63/10 良好(修复 P1 后可上线)
  • 🟠 P1 问题4 个auth_middleware/rbac_middleware 测试 0% + JWT Secret fatal + Runbook缺失
  • 🟢 P2 问题已修复pagination测试2026-05-10 补齐、死代码、context传播

8维度评分2026-04-12

维度 得分
代码质量(15%) 7.0
API契约(10%) 6.5
安全强度(20%) 8.5
前后端集成(10%) 8.0
功能完整性(15%) 7.5
业务专业性(10%) 8.5
用户体验(10%) 8.0
运维简洁性(10%) 6.5
综合 7.63

历史修复验证

  • Sprint 15 修复清单:
    • BUG-01: Goroutine 中使用已回收的 gin context 已验证
    • BUG-02: 密码历史 goroutine 使用裸 context.Background() 已验证
    • BUG-03: 登录日志 goroutine 使用裸 context.Background() 已验证
    • BUG-04: handleError 所有错误一律返回 500 已验证
    • BUG-05: Logout 不使 Token 失效 已验证
    • BUG-06: GetCSRFToken 返回 not_implemented 已验证
  • Sprint 16 修复清单:
    • SEC-04: JTI 时间戳防枚举格式timestamp + random 已验证
    • SEC-08: Refresh Token 滚动轮换防无限流 已验证

关键 API 路由

  • 登录: POST /api/v1/auth/login(参数: account/username/email/phone, password, device_id, device_name, device_browser, device_os
  • CSRF: GET /api/v1/auth/csrf-token
  • 用户信息: GET /api/v1/auth/userinfo
  • 管理员管理: /api/v1/admin/admins
  • 用户管理: /api/v1/users,角色: /api/v1/roles,权限: /api/v1/permissions
  • 登录日志: /api/v1/logs/login

默认管理员

  • username: adminpassword: Admin@123456config.yaml 中配置)
  • 注意:数据库密码哈希需要通过 go run reset_admin_pwd.go 重置后才能匹配

Sprint 执行记录

  • Sprint 122026-04-01建立前后端联调评审机制 + 修复 ValidateRecoveryCode 时序泄漏
  • Sprint 132026-04-02GAP-02 SMS重置时序泄漏 + 密码历史 doResetPassword + GAP-03 设备信任链路主路径补齐
  • Sprint 142026-04-02 续彻底收口所有遗留问题邮件验证码登录stub/ActivateEmail stub/device_id稳定化/R6-01/R6-02死代码
  • Sprint 152026-04-03完整代码审查修复 6 个严重 BUGgoroutine context、错误处理、token 管理)
  • Sprint 162026-04-03彻底解决所有遗留问题P1 + SEC-04/06/08E2E 测试 100% 通过
  • Sprint 172026-04-05SRE 全面审查 + 执行优化
    • 第一轮:识别 5 个 CRIT 问题(评分 4.5/10产出 SRE_SOLUTION.md
    • 第二轮:修复 CRIT-01/02/03/04全量测试 34 包 100% 通过,评分升至 7.2/10
    • 第三轮:修复 WARN-01/02/03评分升至 8.0/10(最终)
    • 新建文件:internal/monitoring/collector.go(系统指标采集)、internal/api/middleware/trace_id.go追踪ID.env.example
    • 报告:docs/sre/SRE_REVIEW_ROUND3.md(三轮完整记录)
  • Sprint 182026-04-07Cursor 游标分页全栈优化(完整实施+验证通过)
    • 新建 internal/pagination/cursor.go(游标编解码工具包)
    • Repository 层 4 个 ListCursor 方法LoginLog/OperationLog/Device/Userkeyset 模式 O(limit)
    • Service 层 4 个 Cursor 方法 + CursorResult 统一响应结构
    • Handler 层双路路由cursor/size → 游标路径page/page_size → offset 回退兼容)
    • 前端 DevicesPage cursor 分页集成CursorPaginatedData 类型 + 状态管理 + Table 兼容)
    • 规模测试LL P99=53ms, OPLOG P99=55msSLA<100ms比 offset 快 2.3x
    • 编译go build , tsc --noEmit

下一步候选(低优先级)

  • 已完成SEC-04/06/08 所有安全问题已修复
  • 性能优化:数据库查询优化、缓存策略优化
  • 功能增强:批量操作、系统设置页、全局设备管理页、管理员管理页、登录日志导出
  • 安全加固OAuth 2.0 第三方登录集成、SAML SSO 集成

执行计划文档

  • 系统性实施计划:docs/plans/SYSTEMATIC_IMPLEMENTATION_PLAN.md
  • 前端执行方案(唯一有效):docs/plans/ADMIN_FRONTEND_EXECUTION_PLAN.md
  • 前后端联调实施指南:docs/processes/FRONTEND_BACKEND_REVIEW_IMPLEMENTATION_GUIDE.md

安全实践亮点(已验证)

  • Argon2id 密码哈希64MB内存、5次迭代、4并行
  • crypto/rand 生成 Token 和盐(无 math/rand
  • JTI 格式timestamp(8字节hex) + random(16字节hex)
  • Token 滚动轮换防无限流
  • 内存存储 access_token非 localStorage
  • HttpOnly Cookie 存储 refresh_token
  • 30秒请求超时控制
  • CSRF 保护机制
  • 登录异常检测AnomalyDetector
  • 常数时间密码比较(防时序攻击)

代码审查标准v4.02026-04-12 升级)

  • 标准文档:docs/code-review/CODE_REVIEW_STANDARD_V4.md8维度代码质量15%+API契约10%+安全20%+前后端集成10%+功能完整15%+业务专业10%+用户体验10%+运维10%
  • 流程文档:docs/code-review/CODE_REVIEW_PROCESS.mdv2.0
  • 执行Checklistdocs/code-review/REVIEW_EXECUTION_CHECKLIST.md
  • 报告目录:docs/code-review/
  • 合并门禁7步go build+vet+test+覆盖率60%+govulncheck+fe build+fe test
  • 时效要求P0:30min / P1:1h / P2:4h / P3:8h
  • 核心原则:零信任文档(工具证据先于断言)
  • 当前评分7.63/10P1 修复后目标≥8.0

技术经验积累

  • replace_in_file 操作要确保不会重复插入内容
  • Ant Design Menu 受控/非受控模式切换受控模式openKeys与CSS冲突改用 defaultOpenKeys
  • 前端 CSS:root 不是 ::root::-webkit-scrollbar 不是 :::-webkit-scrollbar
  • 后端循环依赖排查:先用 go build 查是否能通过,再查循环导入链
  • go test 在 Windows PowerShell 不能用 | tail,改用 | Select-Object -Last N