Files
nexus/Project/fonrey/REVIEW/REVIEW_登录管理_平台管理后台_2026-05-02.md
2026-05-02 16:21:46 +08:00

51 KiB
Raw Blame History

Fonrey 全量 Review — 登录管理 + 平台管理后台

  • Review 范围:登录管理模块 + 平台管理后台模块
  • Review 日期2026-05-02
  • Review 维度8 维度PRD质量 / PRD↔TECH一致性 / DATA_MODEL / API / UI_SYSTEM / 安全多租户 / 性能扩展 / 遗漏场景)
  • 审查文档
    • PRDPRD_MVP.md登录管理/用户登录管理模块PRD.md (v3.0)、平台管理后台/平台管理后台PRD.md
    • TECHTECH_STACK.md (v2.5)、登录管理技术方案.md (v4.1)、平台管理后台技术方案.mdAPI_CONTRACT.md测试规范.md
    • DATA_MODELDATA_MODEL.mdDATA_MODEL_LOGIN.mdDATA_MODEL_PUBLIC.mdENUMS.md (v2.2)
    • UIUI_SYSTEM.md组件清单.md组件规范设计.mdUI_DESIGN/登录管理/登录_UI.mdUI_DESIGN/平台管理后台/平台管理后台_UI.md 及 4 份 HTML 原型
  • 严重程度图例🔴 Blocker影响交付需立即处理/ 🟠 Major影响质量需在迭代内处理/ 🟡 Minor建议优化

维度一PRD 质量

🔴 P-B-1 平台管理后台 PRD 缺失 OpenAPI 与功能编号体系

  • 位置平台管理后台PRD.md 全文 835 行
  • 问题:用户故事未编号(无 PA-001/PA-002 等可追溯标识),与 用户登录管理模块PRD.md v3.0 已剥离实现细节后的"功能 ID + 验收标准"风格不一致。导致需求→测试用例→Bug 单的可追溯链条断裂。
  • 改进方向:按登录 PRD v3.0 风格补齐编号 (PA-001 ~ PA-NN),每条用户故事附"验收标准 (AC)"小节。
  • 责任角色PM / Product Owner

🟠 P-B-2 平台管理后台 PRD 仍混入实现/字段细节

  • 位置平台管理后台PRD.md L210-L350 段落
  • 问题:租户创建/升级/暂停章节出现 tenant_codeschema_namestatus CHECK 值等数据层概念;与 ADR-20260502-003 "PRD 剥离实现细节"原则违背。
  • 改进方向:按登录 PRD v3.0 模式将字段/状态描述迁出至 DATA_MODEL_PUBLIC.mdPRD 仅保留业务语义("租户进入暂停态后所有用户登录被拒绝")。
  • 责任角色PM + Backend Architect

🟠 P-B-3 平台管理员PlatformAdmin"权限矩阵"未量化

  • 位置平台管理后台PRD.md L40-L60, L520-L560DATA_MODEL_PUBLIC.md L189-L250 platform_admins
  • 问题PRD 提到 super_admin / ops / support 三种角色,但未列"角色 × 操作 × 资源"矩阵。技术方案与 DATA_MODEL 也未补齐。
  • 改进方向:在 PRD 增 §权限矩阵小节,列出每条平台操作(创建租户/暂停租户/查看审计日志/发布客户端版本/等)所需角色,并与 platform_admins.role 枚举对应。
  • 责任角色PM + 安全负责人

🟡 P-L-1 登录 PRD 验收标准粒度偏粗

  • 位置用户登录管理模块PRD.md UC-LOGIN-* 段
  • 问题:部分验收标准只描述"成功"路径,未列出所有失败路径覆盖的提示文案(与 组件规范设计.md Toast/Form Error 规范脱节)。
  • 改进方向:每条 UC 补充"异常路径 ×N → 文案 / 状态码"。
  • 责任角色PM

维度二PRD ↔ TECH 一致性

🔴 PT-B-1 创建租户事务边界与回滚补偿未在技术方案落地

  • 位置平台管理后台PRD.md L122-L170 vs 平台管理后台技术方案.md
  • 问题PRD 描述"创建租户 → 建 schema → 跑 migration → 创建 Tenant Admin → 发欢迎邮件"为一体化流程但技术方案未说明django-tenants create_tenant 与 Django 默认事务无法包裹 CREATE SCHEMAmigration 中途失败、欢迎邮件发送失败的补偿/回滚策略缺失。状态机仅定义 creating/failed,但谁置位 failed、是否清理半成品 schema 未规定。
  • 改进方向:技术方案补"租户创建 Saga"章节:步骤 1-N、每步失败的补偿动作、failed 后的人工/定时清理任务。同步在 PRD 注明"创建过程为异步,最终一致"。
  • 责任角色Backend Architect + Platform Ops

🟠 PT-B-2 客户端发版灰度策略 PRD/TECH 描述不一致

🟠 PT-B-3 平台管理员 MFA 在 PRD 强约束但 TECH 未规定算法/实现

  • 位置平台管理后台PRD.md L60"super_admin 必须 MFA" vs 平台管理后台技术方案.mdDATA_MODEL_PUBLIC.md platform_admins L189-L250
  • 问题:未定义 MFA 类型TOTP / SMS / WebAuthn、密钥存储位置、登录流程接入点、备份码机制。platform_admins 表无 mfa_secret/mfa_enabled 字段。
  • 改进方向:技术方案选定 TOTPpyotp方案DATA_MODEL 增 mfa_enabled BOOLmfa_secret_enc TEXTmfa_recovery_codes_enc TEXTPRD 注明备份码生成/重置规则。
  • 责任角色:安全负责人 + Backend Architect

🟠 PT-L-1 登录 PRD "首次登录强制改密" 与 TECH 实现路径未对齐

  • 位置用户登录管理模块PRD.md "is_initial_password" + DATA_MODEL_LOGIN.md user_accounts.is_initial_password + 登录管理技术方案.md v4.1
  • 问题PRD 要求"首次登录必须改密才能进入业务",但技术方案未明确:登录 API 返回时如何标记需要改密(专用 HTTP code/Header/JSON flag中间件/装饰器在哪一层拦截HTMX 前端如何重定向。
  • 改进方向:技术方案补 §"初始密码拦截器":登录响应增 must_change_password: true 字段;新增 RequirePasswordChangeMiddlewareHTMX 通过 HX-Redirect 跳转 /account/change-password
  • 责任角色Backend Architect + Frontend Lead

🟡 PT-L-2 账户锁定阈值 PRD 与 TECH 描述存在微差

  • 位置用户登录管理模块PRD.md §账户锁定 vs DATA_MODEL_LOGIN.md L411-L423Redis 计数器说明)
  • 问题PRD 写"连续 5 次失败锁定 30 分钟"DATA_MODEL 注释也说 5 次,但 登录管理技术方案.md 未将阈值/窗口/键名作为可配置项明示,存在硬编码风险。
  • 改进方向:技术方案显式列出 settingsLOGIN_FAIL_THRESHOLD=5LOGIN_LOCK_DURATION_MIN=30、Redis key login_fail:{tenant}:{username}
  • 责任角色Backend Architect

维度三DATA_MODEL数据模型

🔴 D-1 public.platform_audit_logs.result 大小写违反 ENUMS.md 规范

  • 位置ENUMS.md L70-L72 vs DATA_MODEL_PUBLIC.md L274-L275
  • 问题ENUMS.md 规定 success/failedlower_snake_case文件首部 L10 强制要求DDL 实际为 CHECK (result IN ('SUCCESS','FAILED')) DEFAULT 'SUCCESS'。前端 enum_labels、查询过滤、报表全部错位。
  • 改进方向DDL 改为小写并执行迁移 UPDATE platform_audit_logs SET result = lower(result);同步 enum_labels fixture。
  • 责任角色DBA + Backend Architect

🔴 D-2 public.export_tasks.status done vs ENUMS success 不一致

  • 位置ENUMS.md L102-L106 vs DATA_MODEL_PUBLIC.md L351-L353
  • 问题ENUMS 已迁移为 success(注明"原 done,已迁移"DDL 仍为 CHECK (status IN ('pending','in_progress','done','failed'))backup_records.status 已用 success,与之分裂。
  • 改进方向DDL CHECK + DEFAULT 改为 success,迁移脚本 UPDATE export_tasks SET status='success' WHERE status='done'
  • 责任角色DBA

🟠 D-3 ENUMS.md 缺失 tenants.suspended_reasonlicense_expired

  • 位置ENUMS.md L55-L59 vs DATA_MODEL_PUBLIC.md L115
  • 问题DDL CHECK 已包含 license_expiredENUMS.md 仅列 overdue/violation/requested/other。前端文案/报表无法对该值取值。
  • 改进方向ENUMS.md 补 license_expired,记录变更 ADR同步 enum_labels。
  • 责任角色ENUMS.md 维护者(架构 Atlas

🟠 D-4 ENUMS.md 缺失 login_attempts.failure_reason 的 OTP 相关值

🟠 D-5 user_accounts.phone_enc / phone_hash 业务必填但 DB 可空

  • 位置用户登录管理模块PRD.md L31-L33 vs DATA_MODEL_LOGIN.md L80-L81
  • 问题PRD 规定 username 等于手机号且必填,但 phone_enc TEXT NULLphone_hash VARCHAR(64) NULL。导入/数据修复时可能写入不一致数据,且 phone_hash 唯一性索引(若有)可能失效。
  • 改进方向:业务确认后将 phone_hash 改 NOT NULL普通员工或改用 usernamephone_hash 计算源在应用层强约束 + 触发器保证一致性。
  • 责任角色accounts 模块负责人 + DBA

🟠 D-6 client_heartbeats 无分区策略

  • 位置DATA_MODEL_PUBLIC.md L568-L609
  • 问题:心跳表为高频写表(按 PRD 推算每客户端每 5 分钟一条),无 RANGE 分区,长期会变成 TB 级单表。
  • 改进方向:按 received_at 月度 RANGE 分区;保留 90 天,老分区归档至冷库或删除。
  • 责任角色DBA

🟠 D-7 platform_audit_logs.payload_summary 缺全文索引

  • 位置DATA_MODEL_PUBLIC.md L260-L290
  • 问题PRD 要求平台审计日志支持关键字搜索,但 payload_summary 仅 B-Tree 索引,无 GIN/tsvector 索引。
  • 改进方向:增 CREATE INDEX ON platform_audit_logs USING GIN (to_tsvector('simple', payload_summary))
  • 责任角色DBA

🟡 D-8 跨 schema 操作规范未沉淀到 DATA_MODEL.md 头部

  • 位置DATA_MODEL.md 总纲
  • 问题django-tenants 下不可建跨 schema FK但 README 未明示该约定,新人可能误建外键。
  • 改进方向DATA_MODEL.md 增 §跨 schema 规范小节。
  • 责任角色Data Model Owner

维度四API 契约

🔴 A-B-1 平台管理后台核心端点未在 API_CONTRACT.md 出现

  • 位置API_CONTRACT.md vs 平台管理后台PRD.md
  • 问题:平台后台所述创建租户/暂停租户/发布客户端版本/查看审计等 API 均未在契约文档定义;前后端无对接基线。
  • 改进方向API_CONTRACT.md 增 §平台管理后台 端点章节,列出 path/method/请求/响应/错误码。
  • 责任角色Backend Architect + API 文档负责人

🟠 A-L-1 登录端点错误码未对齐 ENUMS failure_reason

  • 位置API_CONTRACT.md login 端点 vs ENUMS.md L168-L174
  • 问题API 返回错误码与 login_attempts.failure_reason 枚举无映射表,客户端无法根据错误码呈现差异化文案。
  • 改进方向:增"错误码 ↔ failure_reason ↔ 用户文案"三列对照表。
  • 责任角色Backend Architect + 安全负责人

🟠 A-B-2 客户端心跳/版本检查 API 无幂等与限流约定

  • 位置API_CONTRACT.md vs 平台管理后台PRD.md §客户端版本管理
  • 问题:心跳/版本检查为高频公网入口,未规定 Idempotency-Key、限流阈值(每客户端 N 次/分钟)、签名校验。
  • 改进方向API_CONTRACT 补限流 + HMAC 签名(基于 client_id + secret
  • 责任角色Backend Architect + 安全

🟡 A-G-1 全局 API 错误响应结构未统一

  • 位置API_CONTRACT.md
  • 问题:示例中部分接口错误体为 {detail: "..."}、部分为 {code, message, errors[]},前端难以统一错误处理。
  • 改进方向:统一为 RFC 7807 Problem Details 或自定义 {code, message, details} 结构。
  • 责任角色Backend Architect

维度五UI / UI_SYSTEM

🟠 U-B-1 平台后台 UI 设计未引用 组件清单.md 中已定义组件

🟠 U-L-1 登录 UI 缺失"账户锁定"与"密码过期"专用状态页

  • 位置UI_DESIGN/登录管理/登录_UI.md + 3 份 HTML 原型
  • 问题PRD 描述了账户锁定、密码过期、首次登录强制改密 3 类状态,但 UI 设计仅覆盖登录、账密、重置密码 3 种页面。
  • 改进方向:补"已锁定""密码过期"状态页或在登录页定义 inline 提示规范。
  • 责任角色UI Designer + Frontend Lead

🟡 U-G-1 UI_SYSTEM 缺无障碍A11y规范

  • 位置UI_SYSTEM.md
  • 问题:未规定 ARIA、键盘导航、对比度门槛。
  • 改进方向:增 §A11y 章节WCAG 2.1 AA 基线)。
  • 责任角色UI Designer

🟡 U-G-2 HTML 原型与 组件规范设计.md 间距/色板未对齐

  • 位置平台管理后台_UI.html vs 组件规范设计.md
  • 问题:原型出现规范外的 gray-750、不规则间距 p-7
  • 改进方向:原型严格使用 design token间距 4/8/12/16/24/32
  • 责任角色UI Designer

维度六:安全 & 多租户隔离

🔴 S-1 Tenant Admin 初始密码可能明文邮件下发

  • 位置平台管理后台PRD.md L122-L136 + DATA_MODEL_LOGIN.md L468-L469(示例 Fonrey@2025
  • 问题欢迎邮件包含初始密码明文DATA_MODEL 给出系统统一默认密码示例。一旦邮箱被截获或日志记录到邮件正文,全部新租户首批管理员凭据泄露。
  • 改进方向:禁止邮件明文密码;改用一次性安全 reset token10-30 分钟有效,单次使用),强制首次登录改密;离线场景由平台运维通过加密 PDF 单独交付。
  • 责任角色:安全负责人 + PM + accounts 模块

🔴 S-2 平台管理员PlatformAdmin会话与租户用户共用 Cookie/Session 边界未明示

  • 位置平台管理后台PRD.md + 登录管理技术方案.md
  • 问题:未规定平台后台域名/Cookie 域、Session 隔离机制;存在租户 schema 用户登录态与平台后台越权同会话风险。
  • 改进方向:平台后台独立子域 admin.fonrey.comCookie 域分离;中间件根据 request.tenant.schema_name == 'public' 强校验只允许 platform_admins 表用户进入。
  • 责任角色:安全负责人 + Backend Architect

🟠 S-3 短信 OTP 速率/防刷未定量

  • 位置用户登录管理模块PRD.md §短信验证码 + DATA_MODEL_LOGIN.md sms_otp_records
  • 问题:未定义"同号码 X 分钟内最多 N 次"、"同 IP 每日上限"、"图形/滑块校验前置"等防刷规则。
  • 改进方向技术方案补防刷策略DATA_MODEL 增 IP 维度计数器或在 Redis 中维护。
  • 责任角色:安全负责人

🟠 S-4 phone_enc 加密密钥轮换与 phone_hash salt 策略缺失

  • 位置DATA_MODEL_LOGIN.md L80-L81 + TECH_STACK.md
  • 问题未规定加密算法AES-GCM、密钥来源KMSenv、轮换流程、phone_hash 是否加 pepper。
  • 改进方向:技术方案补 §字段级加密:算法/Key 来源/轮换 SOPphone_hash 使用 HMAC-SHA256 + 全局 pepper不入库
  • 责任角色:安全负责人 + Backend Architect

🟠 S-5 平台后台审计日志覆盖范围未量化

  • 位置平台管理后台PRD.md + DATA_MODEL_PUBLIC.md platform_audit_logs
  • 问题哪些操作必须审计、保留期限、防篡改append-only / 哈希链)未规定。
  • 改进方向:列出"必审操作清单"(创建/暂停/删除租户、平台账号增删改、发版、备份恢复);表加 prev_hash/row_hash 形成哈希链或转写至追加型存储。
  • 责任角色:安全负责人

🟡 S-6 跨 schema 查询风险未在技术方案标注

  • 位置DATA_MODEL.md + TECH_STACK.md
  • 问题django-tenants 下错误的 schema 切换会导致跨租户数据泄露。
  • 改进方向:技术方案增 §"禁止在 view 中直接 connection.set_schema_to_public()",必须经 service 层封装。
  • 责任角色Backend Architect

维度七:性能 & 扩展性

🟠 PF-1 client_heartbeats 写入风暴未做缓冲

🟠 PF-2 平台后台租户列表 / 审计日志列表 缺分页/索引设计

🟡 PF-3 登录端点未规定 P95 延迟 SLO

  • 位置用户登录管理模块PRD.md + 测试规范.md
  • 问题:无性能 SLO如登录 P95 < 300ms
  • 改进方向PRD 增非功能需求小节,列出关键端点 SLO测试规范补压测脚本。
  • 责任角色PM + QA

维度八:遗漏场景 & 边界

🔴 X-1 租户删除 / 数据导出 / GDPR 类合规流程缺失

  • 位置平台管理后台PRD.md
  • 问题:仅描述 pending_deletedeleted 状态,未覆盖:删除前数据导出/客户签字回执;平台管理员双人复核;保留期内可撤销。
  • 改进方向:新增"租户注销 SOP"用户故事;技术方案补软删除 + 冷却期 + 双人审批流程。
  • 责任角色PM + 安全 + 合规

🟠 X-2 客户端版本回滚 / 灰度中止流程缺失

  • 位置平台管理后台PRD.md L476-L520
  • 问题:发版有,但回滚/灰度中止缺定义。
  • 改进方向:补 UC "回滚到上一稳定版本"、"立即停灰度"两条用户故事。
  • 责任角色PM

🟠 X-3 备份恢复演练流程缺失

  • 位置平台管理后台PRD.md §备份 + DATA_MODEL_PUBLIC.md backup_records
  • 问题:仅描述备份生成,缺"恢复到独立 schema 验证"演练流程;恢复操作风险(覆盖现网)未提示。
  • 改进方向:增"恢复到隔离 schema 演练"用户故事;技术方案补恢复执行规范(必须先恢复至 restore_* 临时 schema 校验)。
  • 责任角色PM + DBA

🟠 X-4 Tenant Admin 失联 / 转移流程未定义

  • 位置用户登录管理模块PRD.md + 平台管理后台PRD.md
  • 问题Tenant Admin 离职/换号场景下,由谁/如何重置或迁移管理员未定义。
  • 改进方向PRD 增"平台运维代运营重置 Tenant Admin"流程,需双人复核 + 审计。
  • 责任角色PM + 安全

🟡 X-5 同租户多设备登录策略未明示

  • 位置用户登录管理模块PRD.md
  • 问题:是否允许同账号多端在线、互踢策略未定义。
  • 改进方向PRD 明示"允许并发"或"后登挤掉前登"。
  • 责任角色PM

🟡 X-6 跨场景同义概念差异(租户开通 → Tenant Admin 创建)

  • 位置平台管理后台PRD.md L122-L136 vs DATA_MODEL_LOGIN.md L468-L469 vs 用户登录管理模块PRD.md L31-L33
  • 问题:三处对"初始 Tenant Admin"的用户名/初始密码/手机号来源描述用词不统一PRD 平台后台说"系统生成"DATA_MODEL 给出 Fonrey@2025 默认值,登录 PRD 说 username = tenants.contact_phone)。
  • 改进方向:以登录 PRD v3.0 描述为准username = contact_phone初始密码由系统生成 + 一次性 reset token其他文档同步修正。
  • 责任角色PM + Data Model Owner

汇总行动列表(按优先级)

# 严重 维度 问题 责任角色 建议截止
1 🔴 安全 S-1 禁止欢迎邮件明文初始密码,改一次性 reset token 安全 + PM + accounts 立即
2 🔴 安全 S-2 平台后台独立子域/Cookie 域 + 平台账号会话隔离中间件 安全 + Backend Architect 立即
3 🔴 DATA_MODEL D-1 platform_audit_logs.result 大写改小写 + 数据迁移 DBA 当周
4 🔴 DATA_MODEL D-2 export_tasks.status donesuccess + 迁移 DBA 当周
5 🔴 API A-B-1 API_CONTRACT 补齐平台后台所有端点 Backend Architect 当周
6 🔴 PRD↔TECH PT-B-1 创建租户 Saga + 补偿事务 Backend Architect + Ops 当周
7 🔴 PRD质量 P-B-1 平台后台 PRD 引入 PA-NNN 编号体系 + AC PM 当周
8 🔴 遗漏场景 X-1 租户注销 SOP + 双人复核 + 冷却期 PM + 安全 + 合规 下迭代
9 🟠 DATA_MODEL D-3/D-4 ENUMS.md 补 license_expired/wrong_otp/otp_expired ENUMS 维护者 当周
10 🟠 DATA_MODEL D-5 phone_enc/phone_hash NOT NULL + 数据清洗 accounts + DBA 下迭代
11 🟠 DATA_MODEL D-6 client_heartbeats 月度分区 + 90 天保留 DBA 下迭代
12 🟠 DATA_MODEL D-7 payload_summary 增 GIN 全文索引 DBA 当周
13 🟠 PRD↔TECH PT-B-2 客户端发版灰度策略澄清 Backend Architect 下迭代
14 🟠 PRD↔TECH PT-B-3 平台 MFA 选型 + DATA_MODEL 字段补充 安全 + Architect 下迭代
15 🟠 PRD↔TECH PT-L-1 首次登录强制改密拦截器实现路径 Backend + Frontend 当周
16 🟠 API A-L-1 错误码 ↔ failure_reason 对照表 Backend + 安全 当周
17 🟠 API A-B-2 心跳/版本检查接口限流 + HMAC Backend + 安全 下迭代
18 🟠 UI U-B-1 平台后台 UI 引用组件清单组件 ID UI + Frontend 下迭代
19 🟠 UI U-L-1 补"账户锁定/密码过期"状态页 UI + Frontend 当周
20 🟠 安全 S-3 短信 OTP 防刷规则量化 安全 下迭代
21 🟠 安全 S-4 字段级加密 SOP + phone_hash pepper 安全 + Architect 下迭代
22 🟠 安全 S-5 平台审计日志哈希链 + 必审操作清单 安全 下迭代
23 🟠 性能 PF-1 心跳 Redis Stream 缓冲 + 批量落表 Architect 下迭代
24 🟠 性能 PF-2 列表分页/复合索引 Architect + DBA 当周
25 🟠 PRD质量 P-B-2 平台 PRD 剥离实现细节 PM + Architect 下迭代
26 🟠 PRD质量 P-B-3 PlatformAdmin 权限矩阵 PM + 安全 当周
27 🟠 遗漏 X-2 版本回滚 / 中止灰度 UC PM 下迭代
28 🟠 遗漏 X-3 备份恢复演练流程 PM + DBA 下迭代
29 🟠 遗漏 X-4 Tenant Admin 重置/迁移流程 PM + 安全 下迭代
30 🟡 DATA_MODEL D-8 跨 schema 规范沉淀至 README Data Model Owner 下迭代
31 🟡 API A-G-1 错误响应结构统一 Architect 下迭代
32 🟡 UI U-G-1 / U-G-2 A11y 规范 + 设计 token 严控 UI Designer 下迭代
33 🟡 性能 PF-3 关键端点 SLO + 压测脚本 PM + QA 下迭代
34 🟡 PRD↔TECH PT-L-2 锁定阈值 settings 可配置 Architect 当周
35 🟡 PRD质量 P-L-1 登录 PRD 异常路径细化 PM 下迭代
36 🟡 遗漏 X-5 多设备登录策略明示 PM 下迭代
37 🟡 遗漏 X-6 跨文档对"初始 Tenant Admin 创建"用词统一 PM + Data Model Owner 当周

统计🔴 Blocker 8 项 / 🟠 Major 21 项 / 🟡 Minor 8 项,合计 37 项。


结论

整体评估

  • 登录管理模块PRD v3.0 已按 ADR-20260502-003 完成实现细节剥离,整体结构与 DATA_MODEL_LOGIN 大致对齐;主要风险集中在 (a) 手机号字段约束与 PRD 必填语义不一致 (S-1/D-5)、(b) 首次登录改密拦截缺技术方案落地 (PT-L-1)、(c) OTP 防刷规则未量化 (S-3)。
  • 平台管理后台模块:处于"PRD 形成中"阶段,存在较多 Blocker缺端点契约 (A-B-1)、缺创建租户 Saga (PT-B-1)、缺平台账号会话隔离 (S-2)、缺欢迎邮件密码安全策略 (S-1)、PRD 缺编号体系 (P-B-1)、PRD 仍混入实现细节 (P-B-2)。这些项必须在进入开发前解决,否则将引发跨团队反复对齐成本。
  • 跨文档一致性枚举命名规范lower_snake_case已被 ENUMS.md 强约束,但 DATA_MODEL_PUBLIC 的 DDL 多处未对齐D-1/D-2/D-3/D-4属于"规范已立但落地未跟",建议立即统一。

建议下一步动作

  1. 召开 1 次跨角色 Review 会议PM + Architect + 安全 + DBA + UI + Frontend就上表 8 项 Blocker 形成处理排期。
  2. 由 ENUMS.md 维护者在 1 周内发布 v2.3,吸纳 D-3/D-4并附数据迁移 SQL 草案D-1/D-2
  3. 由 PM 在 1 周内完成平台管理后台 PRD 编号化与剥离实现细节的改版,进入下一轮 Review。

附录

A. 审查范围内文档清单

  • PRDPRD_MVP.md登录管理/用户登录管理模块PRD.md (v3.0, 2026-05-02)、平台管理后台/平台管理后台PRD.md (835 行)
  • TECHTECH_STACK.md (v2.5, 2026-04-30)、登录管理技术方案.md (v4.1)、平台管理后台技术方案.md (986 行)、API_CONTRACT.md测试规范.md
  • DATA_MODELDATA_MODEL.mdDATA_MODEL_LOGIN.md (526 行)、DATA_MODEL_PUBLIC.md (1049 行)、ENUMS.md (v2.2, 786 行)
  • UIUI_SYSTEM/UI_SYSTEM.md组件清单.md组件规范设计.mdUI_DESIGN/登录管理/登录_UI.mdUI_DESIGN/平台管理后台/平台管理后台_UI.md登录_UI.html登录_账号密码_UI.html登录_重置密码_UI.html平台管理后台_UI.html

B. 用户原文路径校正

  • Project/fonrey/PRD/系统管理/系统管理模块PRD.md 实际为 Project/fonrey/PRD/系统配置/系统配置模块PRD.md不在本次 Review 范围
  • Project/fonrey/PRD/平台管理后台/平台管理后台PRD 实际带 .md 后缀
  • Project/fonrey/UI_DESIGN/登录_UI.md 实际位于 Project/fonrey/UI_DESIGN/登录管理/登录_UI.md

C. 审查执行说明

  • 本次 Review 由 4 个并行 explore agent 完成证据收集(登录 8 维度、平台 PRD+TECH、DATA_MODEL_PUBLIC+UI、跨文档枚举/字段/状态机漂移),汇总后按 8 维度去重合并。
  • 报告坚持"指出问题 + 给出方向"原则,不重写设计文档内容;如某文档段落实际不完整(如 PT-B-3 MFA 字段缺失),按 Major 报告而非自行补全。

进度跟踪表PM / 架构师填写)

使用说明

  • 状态取值:待启动 / 进行中 / 已完成 / 已验证 / 阻塞 / 搁置(如搁置请在"备注"列填写理由及决策 ADR ID
  • 处理人:填写实际负责人姓名/工号
  • 修订位置:填写本次修订涉及的文档路径 + 章节/行号 + Commit/PR 链接
  • 关联 ADR:跨模块规则变更必须创建 ADR参考 ADR.md 治理规则),格式 ADR-YYYYMMDD-XXX
  • 验证证据:链接到对应的 PR / Commit / 测试用例 IDTC-FON-XXXXXX/ Migration 文件
  • 每周更新:建议每周五由 PM 主持 Review 例会更新本表,并在 REVIEW/ 目录追加增量 Review

Blocker 项(🔴 必须立即处理8 项)

# ID 问题摘要 责任角色 处理人 状态 计划完成日 实际完成日 修订位置 关联 ADR 验证证据 备注
1 S-1 禁止欢迎邮件明文初始密码,改一次性 reset token 安全 + PM + accounts Nova 不修复(设计决策) 2026-05-02 2026-05-02 PM 决策:保持现有欢迎邮件含初始密码的设计,不改为 reset token 流程。接受此安全取舍。
2 S-2 平台后台独立子域 + 平台账号会话隔离中间件 安全 + Backend Architect Atlas 已完成 2026-05-02 2026-05-02 TECH_STACK/平台管理后台技术方案.md v1.1 §7.0(新增"平台后台独立子域与会话隔离"专节含域名分离表、Cookie 隔离规则、PlatformAdminSessionMiddleware 代码规范、测试矩阵) 技术方案 v1.1 变更历史
3 D-1 platform_audit_logs.result 大写改小写 + 数据迁移 DBA Atlas 已完成 2026-05-02 2026-05-02 DATA_MODEL/DATA_MODEL_PUBLIC.md v1.7 §2.4 CHECK 约束;附录 M.1 迁移脚本 migration_D1_audit_logs_result_lowercase.sql DATA_MODEL v1.7 变更历史 迁移脚本须在 Django migration 前执行(见附录 M.1 执行顺序说明)
4 D-2 export_tasks.status donesuccess + 迁移 DBA Atlas 已完成 2026-05-02 2026-05-02 DATA_MODEL/DATA_MODEL_PUBLIC.md v1.7 §2.5 CHECK 约束;附录 M.2 迁移脚本 migration_D2_export_tasks_done_to_success.sql DATA_MODEL v1.7 变更历史 迁移脚本须在 Django migration 前执行(见附录 M.2 执行顺序说明)
5 A-B-1 API_CONTRACT 补齐平台后台所有端点 Backend Architect Atlas 已完成 2026-05-02 2026-05-02 TECH_STACK/API_CONTRACT.md v1.2 §12新增"平台管理后台端点附录",涵盖认证 2 项、租户管理 6 项、授权/MFA 3 项、系统配置 3 项、客户端发布 4 项、导出任务 3 项,含请求/响应示例与错误码) API_CONTRACT v1.2 变更历史
6 PT-B-1 创建租户 Saga + 补偿事务 Backend Architect + Ops Atlas 已完成 2026-05-02 2026-05-02 TECH_STACK/平台管理后台技术方案.md v1.1 §6.1.1(新增"创建租户 Saga 与补偿事务"专节,含 7 步流程状态机、各步骤补偿操作、Celery chord 实现规范、幂等性与重试策略、监控告警要求) 技术方案 v1.1 变更历史
7 P-B-1 平台后台 PRD 引入 PA-NNN 编号体系 + AC PM Nova 已完成 2026-05-02 2026-05-02 PRD/平台管理后台/平台管理后台PRD.md v1.1 — 全部 11 条用户故事补齐 PA-001 ~ PA-011 编号每条附验收标准AC小节 PRD v1.1 变更历史
8 X-1 租户注销 SOP + 双人复核 + 冷却期 PM + 安全 + 合规 Nova 已完成 2026-05-02 2026-05-02 PRD/平台管理后台/平台管理后台PRD.md v1.1 — 新增 PA-011 Story E1含 AC-1 发起申请 / AC-2 数据导出前置确认 / AC-3 双人 MFA 复核 / AC-4 30 天冷静期软删除 / AC-5 硬删除;同步更新 §5.1.4、§5.4、§5.5.1 API 清单、§6 权限矩阵、§7 状态机(新增 Pending Cancellation 节点) PRD v1.1 变更历史 技术方案 & DATA_MODEL 联动更新待 Atlas 处理Pending Cancellation 状态字段)

Major 项(🟠 迭代内处理21 项)

# ID 问题摘要 责任角色 处理人 状态 计划完成日 实际完成日 修订位置 关联 ADR 验证证据 备注
9 D-3 ENUMS.md 补 license_expired ENUMS 维护者 Atlas 待启动
10 D-4 ENUMS.md 补 wrong_otp / otp_expired ENUMS 维护者 Atlas 待启动
11 D-5 phone_enc/phone_hash NOT NULL + 数据清洗 accounts + DBA Atlas 待启动
12 D-6 client_heartbeats 月度分区 + 90 天保留 DBA Atlas 待启动
13 D-7 payload_summary 增 GIN 全文索引 DBA Atlas 待启动
14 PT-B-2 客户端发版灰度策略澄清(租户/百分比) Backend Architect Atlas 待启动
15 PT-B-3 平台 MFA 选型 + DATA_MODEL 字段补充 安全 + Architect Atlas 待启动
16 PT-L-1 首次登录强制改密拦截器实现路径 Backend + Frontend Atlas 待启动
17 A-L-1 错误码 ↔ failure_reason 对照表 Backend + 安全 Atlas 待启动
18 A-B-2 心跳/版本检查接口限流 + HMAC 签名 Backend + 安全 Atlas 待启动
19 U-B-1 平台后台 UI 引用组件清单组件 ID UI + Frontend Iris 待启动
20 U-L-1 补"账户锁定/密码过期"状态页 UI + Frontend Iris 待启动
21 S-3 短信 OTP 防刷规则量化 安全 Atlas 待启动
22 S-4 字段级加密 SOP + phone_hash pepper 安全 + Architect Atlas 待启动
23 S-5 平台审计日志哈希链 + 必审操作清单 安全 Atlas 待启动
24 PF-1 心跳 Redis Stream 缓冲 + 批量落表 Architect Atlas 待启动
25 PF-2 列表分页keyset+ 复合索引 Architect + DBA Atlas 待启动
26 P-B-2 平台 PRD 剥离实现细节 PM + Architect Nova 待启动
27 P-B-3 PlatformAdmin 权限矩阵 PM + 安全 Nova 待启动
28 X-2 客户端版本回滚 / 中止灰度 UC PM Nova 待启动
29 X-3 备份恢复演练流程(恢复至隔离 schema PM + DBA Nova 待启动
30 X-4 Tenant Admin 重置/迁移流程 PM + 安全 Nova 待启动

Minor 项(🟡 优化建议8 项)

# ID 问题摘要 责任角色 处理人 状态 计划完成日 实际完成日 修订位置 关联 ADR 验证证据 备注
31 D-8 跨 schema 操作规范沉淀至 DATA_MODEL.md README Data Model Owner Atlas 待启动
32 A-G-1 全局 API 错误响应结构统一 Architect Atlas 待启动
33 U-G-1 UI_SYSTEM 增 A11y 规范WCAG 2.1 AA UI Designer Iris 待启动
34 U-G-2 HTML 原型严控 design token UI Designer Iris 待启动
35 PF-3 关键端点 SLO + 压测脚本 PM + QA Nova 待启动
36 PT-L-2 锁定阈值 settings 可配置(去硬编码) Architect Atlas 待启动
37 P-L-1 登录 PRD 异常路径细化 PM Nova 待启动
38 X-5 多设备登录策略明示 PM Nova 待启动
39 X-6 跨文档对"初始 Tenant Admin 创建"用词统一 PM + Data Model Owner Nova 待启动

进度统计(每周更新)

统计日期 Blocker 已完成 / 总数 Major 已完成 / 总数 Minor 已完成 / 总数 阻塞项数 风险说明
2026-05-02 0 / 8 0 / 21 0 / 9 0 初始基线
2026-05-02更新 2 / 8 0 / 21 0 / 9 0 P-B-1 & X-1 已完成Nova技术方案/DATA_MODEL 联动更新待 Atlas 跟进
2026-05-02Atlas 修复) 7 / 8 0 / 21 0 / 9 0 S-2 / D-1 / D-2 / A-B-1 / PT-B-1 已完成Atlas剩余 Blocker S-1 为 PM 设计决策不修复;全部 Blocker 实质性完结

Minor 项实际为 9 项(编号 31-39原汇总行动列表 Minor 计为 8 项的差异在于 D-8 与 X-6 是否合并归类,本跟踪表按独立处理项展开计 9 项。

Review 闭环规则

  1. 每条 Finding 修订完成后,处理人填写"修订位置 + 验证证据",状态置 已完成
  2. PM/架构师在每周例会复核:跨模块/跨文档变更必须先创建 ADRADR.md)再改文档,并在"关联 ADR"列填写 ID。
  3. QA 在所有依赖 Finding 全部 已完成 后,对涉及业务路径执行回归测试,状态置 已验证
  4. 任何 Finding 在迭代结束仍未启动需在"备注"列说明原因并在下一次 Review 例会重新评估优先级。
  5. 本表与 REVIEW/ 目录后续增量 Review 报告同步:新增 Finding 追加编号40+)继续延续。