Platform Ops · Read-only PRD

产品需求文档:平台运营后台(只读视图)

仅限平台超级管理员可见。本页面**不提供任何写入入口**;超管账号的增删走外部运维链路。

说明: 这是 Phase 2 交付物,目的是把当前的「超管 / RBAC 现状」透明化。Phase 3 后端 RBAC 上线后,本页将切到 GET /api/me + GET /api/audit 等真后端数据源。

1. 介绍 / 概述

「平台运营后台」是一个仅超级管理员可见的运维信息面板,承担三件事:

  • 展示当前生效的平台超管账号清单
  • 展示当前登录会话的身份字段
  • 跨商户汇总「商户员工」记录

边界(重要):

核心约束:本页面只有「读」,没有「写」。超管账号的新增 / 停用 / 移除永远走外部运维链路(配置文件 / CI 部署 / DBA 工单 / SSO 身份系统),不在任何业务 UI 自助操作。

这条约束是为了避免「超管之间互相提权 / 互相删除」横向风险,符合最小权限与职责分离原则。详见人员管理 PRD §6 / 商户管理 PRD §5 的对应说明。

2. 目标

  • 让超级管理员能在一个页面里透明地看到「平台超管清单从哪来、当前生效的是哪些账号」,不再需要去翻代码或问研发。
  • 让超管能确认自己当前会话的身份字段(身份、所属商户等),便于排查跨商户数据查看异常。
  • 让超管能跨商户聚合查看商户员工总数 / 启用 / 停用情况,作为后续审计 + 配额管理的入口。
  • 普通用户(商户管理员、商户员工)完全无法访问该页面。手动输入 URL → 立即跳转到「总览」,不渲染任何敏感内容。
  • 让本页面的实现里不存在任何写入路径(除「退出登录」这一会话清理动作 + 偏好性的语言切换之外)。

3. 用户流程 / 用户故事

UF-001:超管登录后从侧边栏进入「平台运营后台」

描述: 作为平台超级管理员,我希望登录后在侧边栏直接看到「平台运营」入口,一键进入。

主流程:

  1. 超管账号登录。
  2. 所有页面侧边栏顶部自动出现「平台运营」分组,包含「平台运营后台」入口(🛡️ 图标)。
  3. 超管点击入口,进入 platform-ops.html

验收标准:

  • 「平台运营」分组只在超管登录时渲染;普通用户登录时整组不存在。
  • 分组位置固定在侧边栏最顶部(在「运营管理」之上),与其它两个分组保持视觉一致(图标 + 文案)。
  • 当前页是 platform-ops.html 时,「平台运营后台」入口高亮(active)。
  • 该分组的注入由身份判定中枢自动完成(不需要每个页面 HTML 自己写),切换身份后立即生效。

参考截图:

UF-001 侧边栏「平台运营」入口(超管视图)
UF-001 超管登录后侧边栏顶部自动出现「平台运营」分组

UF-002:阅读平台超管账号清单

描述: 作为超管,我希望看到当前生效的全部超管账号,知道清单是从哪个来源加载的。

主流程:

  1. 超管进入「平台运营后台」。
  2. 页面第一个区块展示「平台超级管理员账号清单」。
  3. 区块顶端的徽章显示「共 N 个」。
  4. 区块下方的提示说明清单来源:外部注入 / 代码层内置默认。
  5. 逐条列出账号字符串(按注入顺序、编号 #1 / #2 …)。

验收标准:

  • 区块标题「平台超级管理员账号清单」;徽章显示当前账号总数。
  • 当存在外部注入的清单时,提示文案说明「来源:外部注入」;否则说明「来源:代码层内置默认清单」。
  • 账号字符串以读取链路返回的实际值显示(已 trim、小写、去重)。
  • 清单为空时显示警示空状态「⚠️ 当前清单为空。这通常意味着配置异常,请联系运维。」
  • 该区块旁没有「新增 / 编辑 / 删除」按钮,也没有任何编辑用 input / textarea / select。

UF-003:查看当前登录会话

描述: 作为超管,我希望确认自己当前的身份字段(身份、所属商户、登录账号等)。

主流程:

  1. 用户在「平台运营后台」第二个区块「当前登录会话」中查看 6 行字段。
  2. 身份字段把内部值翻译成人话:super_admin → 「平台超级管理员」,merchant → 「商户用户」。

验收标准:

  • 展示字段:账号、身份、展示名称、登录手机号、所属商户 ID、所属商户名称。
  • 身份字段做友好翻译,不直接暴露内部枚举字符串。
  • 每个字段下方提供简短 hint 说明字段含义(如「所属商户 ID — 超管为空」)。
  • 缺失字段以 - 显示并加 muted 灰度样式。
  • 提示文案明确:「来源:localStorage.sidebarLoginProfile · 仅本视图展示」,并标注「前端 RBAC 临时方案,正式安全保证待 Phase 3 后端 RBAC 上线」。

UF-004:跨商户聚合查看商户员工

描述: 作为超管,我希望知道平台上有多少商户、每个商户有多少员工 / 启用 / 停用,为日后审计与配额管理打基础。

主流程:

  1. 用户在「平台运营后台」第三个区块「商户员工汇总(跨商户)」查看商户清单。
  2. 清单按商户 ID 升序排列。
  3. 每行展示:商户 ID、商户名称、人员徽章(总员工数 / 启用数 / 停用数)。
  4. 区块顶端徽章「共 N 商户 · M 员工」。

验收标准:

  • 每行包含商户 ID、商户名称、人员徽章三列。
  • 徽章颜色:总员工灰色、启用绿色、停用红色(停用数为 0 时不渲染停用徽章)。
  • 商户名称缺失时显示「(未命名商户)」。
  • 清单按商户 ID 字典序排列,便于审阅。
  • 区块没有任何「跳到该商户员工详情」/「编辑」入口;如需细节,需要去「人员管理」页面查看。
  • 无员工数据时显示空状态「暂无商户员工数据」。

参考截图:

UF-004 平台运营后台总览
UF-004 三个只读区块:超管清单 / 当前会话 / 商户员工汇总

4. 功能需求

  • 访问控制:进入页面前立即调用身份判定中枢,非超管 → location.replace('overview.html'),不渲染任何敏感内容。
  • 侧边栏入口:由身份判定中枢自动注入到所有页面侧边栏的最顶部分组,只对超管渲染;当前页时高亮 active。
  • 只读 banner:页面顶部固定显示「🔒 只读视图」banner,明确告知用户不能在此做账号变更。
  • 三个只读区块:超管清单 / 当前会话 / 商户员工汇总;每个区块顶部带统计徽章,下方带数据来源 hint。
  • 无写入路径:页面 JS 里不允许出现写业务数据到 localStorage 的代码、不允许 fetch POST/PUT/PATCH/DELETE、不允许 XMLHttpRequest。例外仅限:
    • 退出登录时清理 sidebarLoginProfile + cofeLoginSession(属会话清理,非业务数据写入)
    • 语言切换写 adminSidebarLang(偏好字段)
  • 无编辑控件:页面不引入任何 <input><textarea><select>
  • 守门测试:仓库内的单测会在每次构建前校验上述约束(写入路径白名单、控件白名单、关键文案存在性);测试不通过则部署失败。

5. 当前版本限制 / 未来规划

当前版本限制(Phase 2):

  • 页面数据全部读自 localStorage:超管清单读自 CofePlatformConfig(前端配置),员工汇总读自 staffManagersData。浏览器 devtools 改 localStorage 即可伪造 — 当前版本不构成真正的安全边界。
  • 无任何审计 / 日志能力。无法查看「谁、何时、对什么做了什么」。
  • 商户员工汇总只展示总数 / 启用数 / 停用数,展示员工姓名、手机号、权限等敏感字段。如需,去「人员管理」页面看。
  • 登录信息只展示当前一次会话,没有历史登录、登录 IP、设备指纹等。

未来规划(Phase 3 起):

  • 数据源切换:本页数据全部改读后端 API(GET /api/meGET /api/super-adminsGET /api/staff/summary),不再读 localStorage。
  • 审计流:增加「最近超管登录」「关键操作审计」两个只读区块,数据来自 GET /api/audit?actor_role=super_admin
  • SSO 对接:超管账号来源切到公司 IT 身份系统(OIDC group / role)。本页超管清单变成只读「IT 身份系统视图」,不需要平台再维护配置文件。
  • 永远不提供 UI 自助新增 / 删除超管的入口。即使后续做了「平台运营管理员」等次级角色,也不会破坏「超管身份归属由外部身份系统决定」这条原则。