Files
nexus/Project/fonrey/PRD/平台管理后台/平台管理后台PRD.md
2026-05-02 16:21:46 +08:00

52 KiB
Raw Blame History

PRD平台管理后台Platform Admin Console

状态Draft 作者:产品经理 最后更新2026-05-02 版本v1.1 关联模块:权限管理(仅平台侧管理员账号体系)、登录管理(管理员登录与 MFA、所有租户业务模块间接仅作运营/监控对象) 利益相关方工程负责人、运营团队、安全合规、客户成功团队、IT 运维


变更历史

版本 日期 作者 变更说明
v1.0 2026-05-02 产品经理 PRD/系统管理/系统管理模块PRD.md (v1.3) 与 PRD/发布管理/客户端发布管理模块PRD.md (v1.2) 合并而来;统一面向平台管理员视角,统一规划页面路由与业务 API 操作清单。原两份 PRD 文件同步删除,参见 ADR-20260502-001
v1.1 2026-05-02 产品经理 修复 P-B-1:全部用户故事补齐功能编号 PA-001 ~ PA-011与登录管理 PRD v3.0「功能 ID + 验收标准」风格对齐建立需求→测试用例→Bug 单可追溯链条。修复 X-1:新增 PA-011「租户注销 SOP」用户故事Persona E覆盖删除前数据导出确认、双人复核审批流程、30 天冷静期可撤销机制;同步更新租户状态机(新增 Pending Cancellation 状态节点、权限矩阵新增注销审批相关操作行、§5.1.4 删除章节(引用 PA-011 SOP、§5.4 页面导航逻辑(注销审批待办流程)、租户列表筛选(新增 Pending Cancellation / Pending Delete 状态、§5.5.1 API 操作清单(新增注销发起、审批、撤销、硬删除操作项)。

本 PRD 取代以下两份历史文档

  • PRD/系统管理/系统管理模块PRD.mdv1.3,已删除,被本 PRD 替代)
  • PRD/发布管理/客户端发布管理模块PRD.mdv1.2,已删除,被本 PRD 替代)

决策依据:ADR-20260502-001REQ


1. 问题陈述

1.1 背景

Fonrey房睿是面向房产经纪公司的 B2B SaaS 平台,采用 django-tenants 实现 PostgreSQL Schema 级别多租户隔离,同时通过 Electron 桌面客户端为终端经纪人提供统一入口。随着平台商业化推进,平台运营团队需要一套独立、跨租户的「平台管理后台」Platform Admin Console来统一承担

  1. 租户全生命周期管理开通、挂起、注销、License 续期)
  2. 平台版本治理(基础数据版本、租户数据版本、灰度升级、回滚)
  3. 数据备份与恢复(灾难场景应对)
  4. 客户端发布治理(桌面客户端版本上线、强制升级、版本分布监控)
  5. 操作审计与合规
  6. 平台管理员账号与安全MFA、IP 白名单、强制登出)

平台管理后台部署于平台公共域名(与租户应用域名隔离),数据落在 public schema跨租户。Tenant Admin 与 Agent 一律无访问权限。

1.2 核心痛点

痛点 影响方 当前代价
无统一租户管理界面,开通 / 挂起 / 注销依赖人工脚本 运营团队 高错误风险,操作耗时
平台版本升级需停机,影响所有租户 全量用户 SLA 违约风险
数据备份无策略,灾难恢复依赖人工 平台稳定性 数据丢失风险
高危操作无审计轨迹 管理层 / 合规 法律与客户信任风险
客户端浏览器版本碎片化,兼容性问题层出 Agent / 客户成功 支持成本飙升
客户端无统一发布渠道,旧版本与新后端 API 不兼容 全量用户 数据错误风险
无法跨租户掌握客户端版本分布与覆盖率 Platform Admin 无法定向催更

1.3 目标用户

角色 使用场景 频率
Platform Admin平台超级管理员 全局配置、高危操作、版本上线、强制升级 低频(每周)
运营人员Ops Operator 日常租户管理、监控巡检、客户咨询响应 高频(每日)
只读审计员Read-only Auditor 日志查询、合规报告导出 中频(每周)

本 PRD 不涉及租户内部的 Tenant Admin、Agent 角色——他们对本后台无访问权限。


2. 目标与成功指标

目标 指标 当前基线 目标值 测量窗口
租户开通效率 新租户开通耗时 人工脚本 ~30 分钟 < 5 分钟(含自动初始化) 上线后 30 天
平台升级零停机 升级期间受影响租户数 全量中断 灰度阶段 ≤ 5% 租户 每次升级
数据恢复能力 RTO单租户恢复时间 无标准流程 < 2 小时 v1 上线即达标
操作合规覆盖 高危操作审计日志覆盖率 0% 100% 上线后 30 天
管理员安全 平台管理员 MFA 启用率 0% 100%(强制) 上线即达标
客户端兼容性问题消除 因浏览器兼容产生的支持工单数 待统计 降低 ≥ 90% 客户端上线后 60 天
客户端版本一致性 在线用户使用最新客户端比例 0%(无客户端) ≥ 95% 版本发布后 7 天
客户端自动更新成功率 收到通知 → 升级完成的成功率 无基准 ≥ 98% 每次发布后 48 小时

3. 非目标Non-Goals

不在 v1 实现

  • 自动化账单计费、多币种支持、Webhook 自定义集成市场
  • 租户端自助迁移工具
  • 客户响应数据导出请求Story「响应客户数据导出请求」暂缓列入后续迭代

不属于本后台

  • 租户内业务权限的细粒度配置(见权限管理模块 PRD
  • 客服工单系统、SLA 自动赔付
  • macOS / Linux 桌面客户端、移动端 App
  • 客户端离线模式、私有化离线安装方案
  • 客户端代码混淆 / 反逆向加固

不支持

  • 移动端浏览器访问平台管理后台(运营场景明确为 PC 桌面)
  • 多语言界面(运营团队为内部人员,中文已满足)

4. 用户角色与核心故事

Persona A — 运营人员 Lily日常租户管理

负责 Fonrey 的日常运营,每天处理新客户开通、异常租户处理、客户咨询。使用 PC 浏览器登录平台管理后台。

PA-001 Story A1新租户开通

作为运营人员,我希望通过填写表单快速完成租户开通,并由系统自动完成数据库初始化与欢迎通知,无需手动执行脚本。

验收标准

  • 表单提交后,系统在后台自动创建 PostgreSQL Schema 并注入默认配置(见 §5.1.2「默认配置内容」),完成耗时 < 60 秒
  • 默认配置注入包含两部分:
    • 权限定义PermissionDef:注入平台所有权限码定义(permission_code、描述、模块归属),作为该租户 RBAC 体系基础
    • 系统默认角色与权限绑定:按「角色权限矩阵.md」注入 7 个系统内置业务角色(置业顾问、店管、区管、区总、副总、总经、其他职能),并完成角色—权限绑定
  • 初始 Tenant Admin以联系人手机号创建不通过业务角色赋权,由系统在租户创建时直接写入「租户管理员」专属权限集合;该集合独立于 7 个业务角色之外,不在租户角色管理界面显示,不可由 Tenant Admin 自行修改或分配。新增/变更租户管理员须由平台运营方在本后台操作
  • 新租户创建后:平台运营管理员收到站内消息;租户联系人收到欢迎邮件(见下方「欢迎邮件规范」)
  • 联系人无邮箱时,运营人员可在租户详情页下载「入驻信息 PDF 文档」,通过微信等渠道转发
  • 租户访问地址采用统一域名 + Tenant Code 参数形式(https://app.fonrey.com/?tenant={Tenant Code}),无需子域名;详情页展示该链接,可一键复制
  • 创建失败时回滚所有已创建资源,并显示明确错误原因

欢迎邮件规范(联系人有邮箱时自动发送):

字段 内容
主题 【房睿平台】您的账号已开通,欢迎登录
收件人 租户联系人邮箱
正文 公司名称、Tenant Code、登录地址、Tenant Admin 手机号(脱敏后三位)、系统初始密码(明文,首次登录后强制修改)、客服联系方式
备注 初始密码由系统随机生成12 位,含大小写字母+数字),发送后立即标记为「首次登录强制修改」

入驻信息 PDF(无邮箱客户的备选方案):

  • 包含与欢迎邮件相同的关键信息
  • 入口:租户详情 → 基本信息 Tab → 「下载入驻信息」按钮
  • 文件名:{公司名称}_入驻信息_{日期}.pdf

PA-002 Story A2挂起问题租户

作为运营人员,我希望快速冻结欠费租户的访问,同时保证数据不丢失,并在欠费解决后一键恢复。

验收标准

  • 挂起后,该租户所有用户登录跳转至「账号已暂停」提示页;平台后台对该租户数据访问不受影响
  • 支持设置到期时间,到期后系统自动恢复租户状态,并发送通知邮件
  • 所有挂起 / 恢复操作记录于审计日志,包含操作人、时间、原因

PA-003 Story A3License 时效管理与到期自动挂起

作为运营人员(或 Platform Admin我希望每个租户能设置 License 有效期,到期后系统自动挂起租户,并在到期前提前预警。

验收标准

  • 每个租户「基本信息」中包含 License 到期日期字段,由 Platform Admin 在创建或续费时设定
  • 系统每日自动检查 License 到期到期后自动挂起挂起原因标注为「License 到期」
  • 自动挂起后租户联系人收到通知邮件Platform Admin 续费后可手动解除挂起
  • 提前 15 天预警:租户内 Tenant Admin 登录后管理界面顶部出现倒计时横幅:「您的 License 将于 X 天后到期({到期日期}),请联系平台续费」
  • 倒计时横幅仅对 Tenant Admin 可见,不影响普通 Agent
  • License 到期日期在租户列表与详情页均可见支持「即将到期15 天内)」筛选

PA-004 Story A4查看与控制租户用户数License 计费维度)

作为运营人员(或 Platform Admin我希望看到每个租户的当前用户数并能设置用户数上限以便根据 License 授权进行管控。

验收标准

  • 租户列表新增「当前用户数」列,显示该租户当前有效用户总数(含 Tenant Admin + 全部 Agent不含已删除/离职)
  • 租户详情页「基本信息」Tab 显示:当前用户数 / License 授权用户数上限12 / 50
  • Platform Admin 可设置「License 授权用户数上限」字段达到上限时Tenant Admin 在该租户内无法继续创建新用户,并收到提示:「当前用户数已达 License 上限,请联系平台扩容」
  • Platform Admin 可随时调整用户数上限(扩容 / 缩容),变更写入审计日志
  • 租户列表支持按「用户数已满(≥ 上限)」筛选,便于平台运营主动识别需续费的租户

PA-011 Story A5响应客户数据导出请求状态暂缓v1 不实现,列入后续迭代)。


Persona E — Platform Admin David租户注销合规流程

处理租户主动申请注销或因严重违规被强制注销的场景。注销操作不可逆硬删除后需要多重防护——数据导出存证、双人复核、30 天冷静期撤销窗口。

PA-011 Story E1租户注销 SOPTenant Cancellation SOP

作为 Platform Admin我希望执行租户注销时有标准化的审批流程保障——要求数据导出完成、双人复核授权、30 天冷静期可撤销——防止因误操作或内部滥权导致客户数据不可恢复地丢失。

验收标准AC

AC-1 发起注销申请

  • 运营人员或 Platform Admin 可在租户详情页发起「注销申请」,填写:注销原因(客户主动申请 / 严重违规 / 其他)、申请说明(自由文本)
  • 发起后,租户状态流转至 Pending Cancellation(待审批注销),此时租户访问被阻断(等同挂起效果),不可通过常规「恢复」操作解除
  • 发起操作写入审计日志

AC-2 数据导出前置确认

  • 进入审批流程前系统强制展示「数据导出确认」步骤要求操作人触发该租户的完整数据导出§5.1.5),等待导出任务完成(状态 Done后方可提交审批
  • 若申请人选择「客户已自行备份,无需平台导出」,需勾选明确确认框,并填写备注(客户签字回执编号或说明),此记录写入审计日志
  • 审批单中需展示:导出任务 ID或「已确认客户自备份」备注、导出完成时间

AC-3 双人复核审批

  • 注销审批流需要第二名 Platform Admin不得与申请人为同一账号在系统内确认审批确认时需通过 MFA 二次验证
  • 审批人可「批准」或「驳回」:驳回时必须填写驳回原因;驳回后租户状态恢复至 Suspended(仍不可直接恢复为 Active需运营人员手动解除挂起
  • 若 48 小时内无人审批,系统向所有 Platform Admin 发送催审通知(站内消息 + 邮件)

AC-4 软删除与 30 天冷静期

  • 审批通过后,租户立即进入软删除状态(Pending Delete,现有机制);冷静期默认 30 天
  • 冷静期内Platform Admin 可在租户列表「待清除」筛选下找到该租户,执行「撤销注销」
  • 撤销注销需第二名 Platform Admin 同样通过 MFA 确认(与初始注销审批相同的双人复核机制)
  • 撤销成功后,租户状态恢复至 Suspended(需运营人员手动评估后恢复为 Active撤销操作及原因写入审计日志

AC-5 硬删除与资源释放

  • 冷静期届满后,系统自动触发硬删除,或 Platform Admin 可在冷静期内提前手动触发硬删除(需再次 MFA 确认,并再次展示「此操作不可逆」警告)
  • 硬删除释放PostgreSQL Schema、Cloudflare R2 存储桶、Tenant Code、License 席位
  • 硬删除完成后:向租户联系邮箱发送「账号已注销」通知(含注销日期、数据保留期说明);审计日志记录完整操作链

注销状态流转(补充至 §7 状态机):

[活跃 Active] 或 [已挂起 Suspended]
  ↓ 运营/Platform Admin 发起注销申请
[待审批注销 Pending Cancellation]
  ↓ 双人 MFA 审批通过
[待清除 Pending Delete](冷静期 30 天)
  ↓ 可在冷静期内由双人 MFA 撤销 → 恢复至 [已挂起 Suspended]
  ↓ 冷静期届满 或 提前手动硬删除MFA
[已删除 Deleted]

Persona B — Platform Admin David系统升级、回滚与版本治理

负责平台技术运维,周期性执行版本升级,关注升级稳定性与租户影响面。拥有所有高危操作权限。

PA-005 Story B1灰度系统升级

作为 Platform Admin我希望先对内测租户升级新版本验证稳定后再全量推送避免一次性影响所有客户。

验收标准

  • 升级前自动执行健康检查,存在异常服务时阻断升级并提示
  • 支持指定目标租户进行灰度升级,灰度租户名单可编辑
  • 升级过程实时展示进度(每个租户的升级状态),支持查看升级日志
  • 升级失败时系统自动告警,并提供一键回滚入口

PA-006 Story B2升级失败回滚

作为 Platform Admin我希望在升级出现问题时立即回滚至上一稳定版本并生成事件报告。

验收标准

  • 回滚操作触发前自动保存当前状态快照
  • 支持全量回滚或单租户回滚
  • 回滚完成后生成事件报告:失败原因、回滚耗时、影响范围
  • 回滚操作需二次身份验证确认MFA

PA-007 Story B3查看平台与租户版本总览

作为 Platform Admin我希望在管理界面一眼看到整个平台的版本情况包括基础数据版本和每个租户各自的数据升级版本。

验收标准

「版本总览」页面分两部分:

  • Part 1平台基础数据版本

    • 展示当前平台基础数据(公共 Schema 中的 PermissionDef、系统配置等 seed 数据)的版本号
    • 该版本对所有租户一致,每次平台升级为一次性全量升级
    • 字段:版本号、最后升级时间、升级描述、升级执行人
  • Part 2租户数据升级版本

    • 列表展示每个租户当前数据版本号(即该租户 Schema 已完成的 migration 版本)
    • 灰度升级下各租户版本可能不一致
    • 字段:租户名称、当前数据版本、上次升级时间、升级状态(最新 / 待升级 / 升级中 / 升级失败)
    • 支持按「待升级」「升级失败」筛选,快速定位异常租户
    • 点击租户行可跳转至该租户详情的「备份记录」Tab
  • 页面支持手动刷新;版本数据允许最多 5 分钟缓存延迟


Persona C — Platform Admin David客户端发布治理

同 Persona B但聚焦桌面客户端版本上线、强制升级与跨租户版本分布。

PA-008 Story C1发布新版本客户端

作为 Platform Admin我希望通过本后台上传新版客户端安装包并配置版本信息使全平台所有租户的客户端能感知到更新并引导升级。

验收标准

  • 平台管理后台提供「客户端版本管理」页面(位于本后台一级菜单,与租户系统管理隔离)
  • 支持上传 .exe 安装包,并填写:
    • 版本号SemVerX.Y.Z,自动校验格式)
    • 版本类型(普通更新 / 强制更新)
    • 最低兼容版本(低于此版本的客户端将被强制升级)
    • 更新日志Markdown最多 2000 字,对外展示)
    • 内部发布说明(不对外)
  • 支持版本状态:草稿(不对外生效)/ 已发布 / 已下线
  • 上传成功后,系统自动计算 SHA256 校验值并填充到该版本元数据,作为客户端下载完成后的完整性校验依据
  • 发布后,客户端下次检测时即可感知(无需等待)
  • 支持版本回滚:将指定历史版本重新置为「已发布」,自动将当前版本标记为「已下线」
  • 支持便携版Portable ZIP作为可选上传项

PA-009 Story C2跨租户监控客户端版本分布

作为 Platform Admin我希望跨租户查看当前所有在线客户端的版本分布以了解全平台升级覆盖率对仍使用旧版本的客户端发出提醒或强制升级。

验收标准

  • 「客户端版本管理」页展示版本分布统计:各版本在线客户端数量及占比(饼图或条形图)
  • 支持按租户维度查看版本分布(区分不同经纪公司,便于识别落后租户)
  • 支持按租户统计安装数:可查看任一租户的「当前活跃安装数(最近 24h」与「历史装机总数不论是否活跃
  • 支持「全平台租户活跃榜」视图:以列表形式展示各 active 状态租户的 tenant_code、租户名称、活跃安装数、历史装机总数,按活跃安装数降序排列
  • 支持对指定版本范围的客户端推送「强制更新」标记(如:将所有低于 v1.5.0 的客户端标记为强制更新)
  • 支持升级进度趋势图:新版本发布后各天累计升级完成的用户比例

客户端侧用户故事不在本 PRD 范围如「Agent 下载安装客户端」「Agent 自动升级」)。这些故事面向终端用户使用的桌面 App不属于平台管理后台职责。但本 PRD 通过 Story C1/C2 为客户端侧故事提供版本数据源与控制能力。


Persona D — 只读审计员 Carol合规审计

负责平台合规审查,定期导出操作日志供法务或客户审查。无任何写权限。

PA-010 Story D1审计日志查询与导出

作为审计员,我希望按操作人、时间范围、操作类型筛选操作日志,并导出为报告。

验收标准

  • 日志列表支持多维度筛选:操作人、时间范围、操作对象、操作类型(创建 / 修改 / 删除 / 高危)
  • 每条日志包含:操作人、操作时间、操作对象(租户/用户ID、内容摘要、结果成功/失败)、来源 IP
  • 支持导出筛选结果为 CSV

5. 功能详细说明

5.1 租户与 License 管理

5.1.1 租户生命周期

新建租户表单字段

字段 类型 必填 说明
公司名称 Text 最大 100 字符
联系人 Text 主联系人姓名
联系人手机号 Text 用于创建初始 Tenant Admin
联系邮箱 Email (可选) 发送欢迎邮件;无邮箱改用 PDF 下载
所在地区 Select 省市两级
订阅套餐 Select Basic / Professional / Enterprise
License 到期日期 Date 到期后自动挂起
License 授权用户数上限 Number 用户数计费维度

创建流程

  1. 表单校验通过后,后台异步任务执行:
    • 创建 PostgreSQL Schematenant_{id}
    • 执行 Migrate 初始化表结构
    • 注入默认配置(见下方「默认配置内容」)
    • 生成初始密码12 位随机),标记为「首次登录强制修改」
    • 联系邮箱已填写时:发送欢迎邮件(含 Tenant Code、初始密码、平台访问链接
  2. 任务完成后更新租户状态为 active;失败则全量回滚并标记为 failed
  3. 生成唯一 Tenant IDUUID及 Tenant Code12位纯数字202605023765

5.1.2 默认配置内容Schema 初始化时注入)

配置类型 内容 说明
权限定义PermissionDef 平台全量权限码 从 public schema 同步至租户 schema
系统默认业务角色 7 个内置角色(置业顾问/店管/区管/区总/副总/总经/其他职能)+ 角色—权限绑定 按「角色权限矩阵.md」
初始 Tenant Admin 用户 以联系人手机号创建 写入「租户管理员」专属权限集合,独立于 7 个业务角色

5.1.3 挂起Suspend

  • 触发方式
    • 手动:运营人员选择挂起原因(欠费 / 违规 / 主动申请 / 其他)
    • 自动:系统每日检查 License 到期日期到期自动挂起原因「License 到期」)
  • 可设置挂起到期时间(留空表示永久挂起直至手动恢复)
  • 挂起效果:租户用户访问被拒,重定向至暂停提示页;平台管理后台对该租户数据访问不受影响
  • 自动恢复手动设置了到期时间的挂起会到期自动恢复License 到期挂起须 Platform Admin 手动恢复
  • 通知:挂起 / 恢复均向租户联系邮箱发送通知(无邮箱跳过)
  • License 到期前 15 天起,租户端 Tenant Admin 看到倒计时横幅

5.1.4 删除Delete

注意租户注销是高危操作须遵循「PA-011 租户注销 SOP」——发起注销申请 → 强制数据导出确认 → 双人 MFA 复核审批 → 软删除30 天冷静期,可撤销)→ 自动或提前手动硬删除。不允许绕过此 SOP 直接执行删除。

模式 说明
软删除Pending Delete SOP 审批通过后自动进入;数据保留 30 天(默认,可配置)后自动清除
硬删除 冷静期内 Platform Admin 提前触发(需 MFA + 不可逆警告),或冷静期届满自动触发;仅 Platform Admin 可操作

删除前置条件PA-011 SOP 强制执行)

  1. 发起申请时必须填写注销原因
  2. 审批前强制完成数据导出确认(平台导出 Done 或客户自备份书面确认)
  3. 须第二名 Platform Admin≠ 申请人MFA 审批通过
  4. 软删除冷静期内可由双人 MFA 执行「撤销注销」

删除完成后释放:访问域名 / Tenant Code、Cloudflare R2 存储桶、License 席位

5.1.5 数据导出Export

Story A5响应客户数据导出请求暂缓本节描述能力为运营内部数据核查使用。

  • 触发:管理员手动,选择目标租户 + 模块 + 格式
  • 异步执行状态实时刷新Pending → In Progress → Done / Failed
  • 内容结构化数据CSV / JSON / SQL Dump+ 文件资产 URL 清单(不打包文件实体
  • 模块选项:客户数据 / 房源数据 / 交易记录 / 系统配置 / 全量
  • 存储:压缩后存于 Cloudflare R2 临时目录,签名下载链接 24 小时有效

文件资产导出处理规则v1 决策):

  • R2 Bucket 配置为 public read文件通过 CDN 持久 URL 形式内嵌于导出数据
  • 账号未硬删除前CDN URL 持续有效
  • 迁移类需求(需要文件实体)走「完整备份」流程,不走「数据导出」
导出格式 图片字段示例 附件字段示例
CSV photos 列:多个 CDN URL 以英文分号分隔 attachments 列:文件名|CDN URL 以分号分隔
JSON "photos": [{"url": "...", "filename": "...", "created_at": "..."}] "attachments": [{"url": "...", "filename": "..."}]
SQL Dump 文件元数据表原样导出,file_url 字段为 CDN URL 同左

导出包附 README.txt 说明文件资产链接策略。

数据导出 vs 完整备份

维度 数据导出Export 完整备份Backup
用途 合规审计、数据核查、业务分析 灾难恢复、租户迁移
文件资产 CDN URL 清单 含 R2 文件实体
完成时间 分钟级 小时级
触发方式 运营人员手动 手动 / 系统自动(升级前)
存储成本 极低 较高

5.1.6 数据备份Snapshot

  • 自动触发:升级前系统对参与租户全量备份
  • 手动触发:管理员可在租户详情页发起
  • 内容:数据库 Schemapg_dump+ R2 文件存储(附件、图片)
  • 字段:备份时间、触发方式、备份大小、状态
  • 保留策略:默认最近 10 个版本,可在全局配置中调整
  • 存储:加密;目标可选(本地 / S3 / R2 / GCS

5.1.7 数据恢复Restore

恢复流程:

选择目标备份版本
  → 二次确认(显示当前数据版本将被覆盖)
  → 自动对当前数据生成临时快照
  → 租户切换为维护模式
  → 执行恢复
  → 自动恢复服务 → 生成恢复报告

报告字段:操作人、操作时间、恢复前/后版本、耗时、结果。

5.1.8 套餐升级

  • 升级路径Basic → Professional → Enterprise
  • 升级前展示差异对比表功能项、用户数上限、存储空间、API 额度)
  • 生效模式:立即 / 下一账期
  • 升级前自动备份;升级失败可一键回滚
  • 升级历史:时间、操作人、升级前后套餐

5.1.9 租户用户与权限管理

Tenant Admin 管理

  • 每个租户可设置 1 至多名 Tenant Admin
  • Platform Admin 可直接创建新用户并赋予 Tenant Admin或从租户现有用户中指定
  • 支持新增 / 替换 / 撤销

密码重置(针对租户内任意用户):

  • 方式一:发送重置链接至注册邮箱(用户自助)
  • 方式二:管理员直接设置临时密码(首次登录强制修改)
  • 所有操作进审计日志

5.1.10 租户监控与统计

资源监控指标

指标 展示维度
CPU / 内存占用 实时折线图
存储用量 当前值 vs 套餐上限
API 调用次数 当日 / 本月累计
活跃用户数 当日活跃
当日登录次数 累计折线图
异常请求数 4xx / 5xx 分类
慢查询数量 > 500ms

支持为每个指标配置阈值告警(邮件 / Webhook

可用性 / SLA

  • 服务可用率统计:日 / 周 / 月
  • 故障事件记录:开始 / 恢复时间、持续时长、影响描述
  • SLA 达标率报告,可导出

5.2 平台版本治理

5.2.1 系统升级流程

上传/拉取升级包
  → 自动健康检查(所有服务正常才允许)
  → 配置升级策略:全量 / 灰度(指定内测租户)
  → 升级前自动备份(参与本次升级的租户)
  → 执行升级
  → 实时展示升级进度(租户维度状态列表)
  → 完成通知(成功/失败详情)

灰度升级策略

  • 维护「内测租户组」列表,由 Platform Admin 配置
  • 灰度阶段仅对内测租户升级,其余租户保持原版本
  • 内测验证通过(手动确认)后,触发全量升级

5.2.2 升级回滚

  • 触发:手动 / 自动(监控检测到错误率超阈值)
  • 范围:全量回滚 / 单租户回滚
  • 前置:自动保存当前状态快照
  • 后续:生成事件报告(失败原因、回滚耗时、受影响租户列表)
  • 必需MFA 二次验证

5.2.3 定时备份策略

配置项 选项
备份频率 每小时 / 每日 / 每周
执行时间窗口 默认每日 02:00
保留数量 最近 N 个版本(默认 10
存储目标 本地 / AWS S3 / Cloudflare R2 / GCS

支持为单租户配置独立备份计划,覆盖全局策略。备份失败自动告警,支持手动重试。

5.2.4 版本总览

见 Story B3 验收标准。该视图为运营提供「平台基础数据版本 + 各租户数据版本」双维度可见性,是灰度升级时代的版本治理核心入口。


5.3 客户端发布治理

本节面向 Persona C 的 Story C1 / C2。客户端本身的技术形态、自动更新机制、签名分发等实现细节属于技术方案范畴请参见 TECH_STACK/平台管理后台技术方案.md。本 PRD 仅描述产品视角的业务能力。

5.3.1 版本管理

平台管理后台提供独立的「客户端版本管理」一级页面,承担:

版本列表展示字段

说明
版本号 SemVer 格式,如 v1.2.3
版本类型 普通更新 / 强制更新(后者标红)
状态 草稿 / 已发布(绿)/ 已下线(灰)
发布时间 设为已发布的时间
下载量 该版本安装包被下载次数
操作 发布 / 下线 / 编辑 / 复制下载链接

新增/编辑版本表单字段

字段 类型 必填 说明
版本号 Text SemVer自动校验
版本类型 单选 普通更新 / 强制更新
最低兼容版本 Text 低于该版本的客户端被强制升级
安装包EXE File 上传至 R2最大 500MB
便携版ZIP File 同上
SHA256 校验值 Text自动 上传后系统计算并填充
更新日志 Markdown 对外展示,最多 2000 字
发布说明(内部) Text 仅内部查看
状态 单选 草稿 / 立即发布

5.3.2 版本分布统计

图表 说明
版本分布饼图 按客户端版本号统计当前活跃用户数量及占比
升级进度趋势图 新版本发布后各天累计升级完成的用户比例
租户版本明细 按租户展示其员工的客户端版本分布
全平台租户活跃榜 tenant_code + 租户名称 + 活跃安装数(最近 24h + 历史装机总数,按活跃安装数降序

底层数据由 public.client_heartbeats 表的 tenant_id 维度聚合提供。

5.3.3 强制更新推送

  • Platform Admin 可对指定版本范围的客户端打上「强制更新」标记(如所有低于 v1.5.0 的客户端强制升级)
  • 客户端侧的强制更新行为(不展示「稍后提醒」、必须升级后方可继续使用)由客户端实现保障

5.4 平台管理后台总体规划

5.4.1 页面清单与访问权限

以下为产品视角的页面清单。「页面路径」以业务可读形式表达,不约束技术实现(具体 URL 由技术方案决定。所有页面均位于平台管理后台域无访问权限的角色Tenant Admin、Agent 及未登录用户)一律重定向到登录页或 403。

# 页面 路径(业务可读) 访问权限 说明
1 登录页 /admin/login 公开(仅平台管理员账号可登录) 强制 MFA 配置
2 仪表盘 /admin 全部三类管理员 平台总览、健康度、近期告警、最近高危操作
3 租户列表 /admin/tenants Platform Admin / 运营人员(写)/ 审计员(只读) 检索、筛选、快捷操作
4 新建租户 /admin/tenants/new Platform Admin / 运营人员
5 租户详情:基本信息 /admin/tenants/{id} 同租户列表 含 License、用户数、状态等编辑入口
6 租户详情:用户管理 /admin/tenants/{id}/users 同上 Tenant Admin 列表、用户列表、密码重置
7 租户详情:套餐信息 /admin/tenants/{id}/plan 同上 套餐详情、用量、升级入口
8 租户详情:监控 /admin/tenants/{id}/monitoring 同上 资源使用、SLA
9 租户详情:备份记录 /admin/tenants/{id}/backups Platform Admin/ 运营人员(仅触发备份)/ 审计员(只读) 备份列表、触发备份、恢复入口(仅 Platform Admin
10 租户详情:操作历史 /admin/tenants/{id}/history 全部三类 该租户相关所有管理员操作日志
11 系统版本管理 /admin/system/versions Platform Admin/ 运营人员(只读)/ 审计员(只读) 含「版本总览」(平台基础数据版本 + 各租户数据版本)、升级、回滚
12 备份管理 /admin/system/backups Platform Admin/ 运营人员(触发)/ 审计员(只读) 全局备份计划、备份任务列表、恢复入口
13 监控与告警 /admin/monitoring Platform Admin / 运营人员(写)/ 审计员(只读) 全局监控图表、告警规则、告警历史
14 客户端版本管理 /admin/client-releases Platform Admin/ 运营人员(只读)/ 审计员(只读) 版本列表、发布、下线、回滚、版本分布、租户活跃榜
15 审计日志 /admin/audit-logs 全部三类(含审计员) 多维度筛选、导出 CSV
16 管理员设置 /admin/settings/admins 仅 Platform Admin 管理员账号、角色、MFA、IP 白名单、登录会话

5.4.2 页面间导航逻辑(用户故事视角)

  • 用户访问任一受保护页面但未登录 → 跳转 /admin/login
  • 登录成功且未配置 MFA → 强制跳转 MFA 配置向导后再进入仪表盘
  • 仪表盘的「最近高危操作」区域,每条记录可点击跳转到「审计日志」并自动以该记录为筛选条件
  • 仪表盘的「系统健康」区域,点击异常服务可跳转「监控与告警」对应租户/服务视图
  • 租户列表点击「公司名称」→ 进入「租户详情:基本信息」(默认 Tab
  • 租户详情各 Tab 之间通过页内 Tab 切换URL 同步变化(页面 510
  • 租户详情「备份记录」中点击「恢复」→ 出现二次确认弹窗 + MFA 验证(仅 Platform Admin 可见)
  • 「系统版本管理」中点击某租户行 → 跳转到该租户的「备份记录」Tab
  • 「客户端版本管理」中点击「全平台租户活跃榜」中的租户名称 → 跳转到该租户「基本信息」Tab
  • 客户端版本「发布 / 下线 / 强制更新推送」操作 → 二次确认;强制更新推送额外要求 MFA
  • 任何高危操作(删除/注销租户、数据恢复、系统回滚、客户端版本下线、强制更新推送)触发 MFA 二次确认弹窗
  • 租户详情「基本信息」页面Platform Admin / 运营人员可发起「注销申请」;状态为 Pending Cancellation 时,原「挂起/恢复」按钮隐藏,显示「查看注销审批单」入口
  • 注销审批待办:系统向第二名 Platform Admin 发送站内通知点击通知进入审批单详情展示申请人、注销原因、数据导出确认记录提供「批准MFA」/「驳回」操作
  • 审批批准后,租户自动进入 Pending Delete;租户列表「待清除」筛选下可见,提供「撤销注销(双人 MFA」和「提前硬删除MFA」入口
  • 用户超过 30 分钟无操作 → 自动登出,下次操作跳转登录页
  • 「管理员设置」中 Platform Admin 强制登出某管理员 → 该管理员的所有会话立即失效,下次请求跳转登录页

5.4.3 仪表盘内容

模块 展示内容
全局概览 总租户数、活跃租户数、本月新增
系统健康 各核心服务状态Django / PostgreSQL / Redis / Celery / R2
近期告警 最近 24 小时告警,按严重程度分类
资源概览 平台整体存储用量、API 调用量趋势
客户端覆盖 当前活跃客户端总数、最新版本占比
最近操作 最近 10 条高危操作审计记录

5.4.4 租户列表

  • 分页(默认 20 条/页)
  • 搜索公司名称、Tenant Code、联系邮箱关键词
  • 筛选状态Active / Suspended / Pending Cancellation / Pending Delete / Deleted、套餐、注册时间、即将到期15 天内)用户数已满
  • 公司名称、Tenant Code、套餐、状态、注册时间、活跃用户数 / License 上限、客户端最新版本占比
  • 快捷操作:查看详情、挂起、发起备份、数据导出

5.5 业务 API 操作清单(产品视角)

仅描述「平台管理员需要能完成哪些业务操作」;不定义具体 RESTful 路径、HTTP 方法、参数结构。具体接口设计见对应技术方案文档。

5.5.1 租户管理

  • 平台管理员需要能查询租户列表(支持多维度筛选)
  • 平台管理员需要能查看单租户的完整详情基本信息、套餐、用户、License、备份、操作历史
  • 平台管理员需要能创建新租户(含异步初始化 Schema 与默认配置)
  • 平台管理员需要能编辑租户基本信息(公司名、联系人、邮箱、地区)
  • 平台管理员需要能挂起 / 恢复租户(含挂起原因、到期时间)
  • 平台管理员运营人员需要能发起租户注销申请PA-011 SOP填写原因、完成数据导出确认
  • 第二名 Platform Admin 需要能审批租户注销申请(批准需 MFA驳回需填写驳回原因
  • 平台管理员需要能在冷静期内撤销租户注销(双人 MFA
  • 平台管理员需要能在冷静期内提前手动触发硬删除MFA + 不可逆确认)
  • 系统需能在冷静期届满后自动触发硬删除并释放所有资源
  • 平台管理员需要能软删除 / 硬删除租户(仅限通过 PA-011 SOP 触发,不提供绕过 SOP 的直接删除入口)
  • 平台管理员需要能调整租户的 License 到期日期
  • 平台管理员需要能调整租户的 License 授权用户数上限
  • 平台管理员需要能升级租户套餐
  • 平台管理员需要能下载租户的「入驻信息 PDF」

5.5.2 租户用户管理

  • 平台管理员需要能查询租户内的全部用户
  • 平台管理员需要能新增 / 替换 / 撤销 Tenant Admin
  • 平台管理员需要能为租户内任意用户重置密码(链接 / 临时密码两种方式)

5.5.3 数据导出与备份

  • 平台管理员需要能为指定租户触发数据导出(异步,可查询任务状态、获取下载链接)
  • 平台管理员需要能为指定租户手动触发完整备份
  • 平台管理员需要能查询某租户的备份记录列表
  • 平台管理员需要能基于某个备份执行恢复操作(需 MFA
  • 平台管理员需要能配置全局 / 单租户的定时备份策略

5.5.4 平台版本与升级

  • 平台管理员需要能上传 / 拉取系统升级包
  • 平台管理员需要能配置升级策略(全量 / 灰度,含内测租户名单)
  • 平台管理员需要能触发升级,并实时查询升级进度(租户维度)
  • 平台管理员需要能查看升级日志
  • 平台管理员需要能触发升级回滚(全量 / 单租户,需 MFA
  • 平台管理员需要能查询「平台基础数据版本」与「各租户数据升级版本」总览

5.5.5 客户端发布

  • 平台管理员需要能查询客户端版本列表(含状态、下载量)
  • 平台管理员需要能新增客户端版本(上传安装包,系统自动计算 SHA256
  • 平台管理员需要能修改某版本元数据(更新日志、版本类型、最低兼容版本等)
  • 平台管理员需要能切换某版本状态(草稿 → 已发布 / 已发布 → 已下线)
  • 平台管理员需要能将某历史版本回滚为「已发布」(同时把当前版本置为已下线)
  • 平台管理员需要能对指定版本范围的客户端打上「强制更新」标记
  • 平台管理员需要能查询全平台客户端版本分布(饼图、趋势图)
  • 平台管理员需要能查询全平台租户活跃榜(活跃安装数、历史装机总数)
  • 平台管理员需要能查询任一租户的客户端版本分布与活跃数

客户端自身与更新服务的交互(如查询最新版本、上报心跳)属于客户端运行时与平台之间的接口,不属于平台管理员的操作;本 PRD 不在此章描述,由 TECH_STACK/平台管理后台技术方案.md 定义。

5.5.6 监控与告警

  • 平台管理员需要能查询全局 / 单租户的监控图表
  • 平台管理员需要能配置告警规则(指标 + 阈值 + 通知渠道)
  • 平台管理员需要能查询告警历史

5.5.7 审计日志

  • 平台管理员(含审计员)需要能按多维度筛选审计日志
  • 平台管理员(含审计员)需要能导出筛选结果为 CSV

5.5.8 平台管理员账号与安全

  • Platform Admin 需要能创建 / 编辑 / 停用平台管理员账号
  • Platform Admin 需要能配置管理员角色Platform Admin / 运营人员 / 只读审计员)
  • 全部平台管理员需要能首次登录时配置 MFA无法跳过
  • 全部平台管理员需要能在高危操作时通过 MFA 二次确认
  • Platform Admin 需要能配置 IP 白名单
  • Platform Admin 需要能查看活跃会话并强制登出指定管理员

5.6 安全与访问控制

强制要求(不可降级)

安全要求 说明
MFA 强制启用 所有管理员账号首次登录强制配置 TOTP不可跳过
IP 白名单 仅允许指定 IP 范围访问平台管理后台
高危操作二次验证 删除租户、数据恢复、系统回滚、客户端版本下线、强制更新推送均触发 MFA 二次确认
会话超时 无操作 30 分钟自动登出Token 失效
强制登出 Platform Admin 可在「管理员设置」中强制终止指定管理员的所有会话
与租户应用隔离 平台管理后台部署在独立平台域名,不与租户应用共享 Session / Cookie

5.7 操作审计日志规范

所有写操作Create / Update / Delete及高危操作必须落审计日志字段

{
  "id": "UUID",
  "operator_id": "管理员用户 ID",
  "operator_name": "管理员显示名",
  "action_type": "CREATE_TENANT | SUSPEND_TENANT | RESUME_TENANT | DELETE_TENANT | HARD_DELETE_TENANT | RESTORE_DATA | SYSTEM_UPGRADE | ROLLBACK | RESET_PASSWORD | RELEASE_CLIENT_VERSION | OFFLINE_CLIENT_VERSION | FORCE_UPDATE_PUSH | UPDATE_LICENSE | UPDATE_LICENSE_USER_LIMIT | AUTO_SUSPEND_LICENSE_EXPIRED | ...",
  "target_type": "Tenant | User | System | Backup | ClientRelease | Admin",
  "target_id": "操作对象 ID",
  "target_name": "操作对象可读名称",
  "payload_summary": "操作内容摘要(非敏感字段)",
  "result": "SUCCESS | FAILED",
  "error_message": "失败原因(如有)",
  "ip_address": "操作来源 IP",
  "created_at": "ISO 8601 时间戳"
}

6. 角色权限矩阵

| 操作 | Platform Admin | 运营人员 | 只读审计员 | |------|---------------|---------|-----------|| | 创建租户 | | | | | 挂起 / 恢复租户 | | | | | 发起租户注销申请PA-011 SOP | | | | | 审批注销申请第二人复核MFA | | | | | 撤销注销(冷静期内,双人 MFA | | | | | 提前手动硬删除MFA | | | | | 软删除 → Pending Delete仅经 SOP 自动触发) | 系统自动 | — | — | | 调整 License 到期日期 / 用户数上限 | | | | | 数据导出 | | | | | 手动触发备份 | | | | | 数据恢复 | | | | | 系统升级 | | | | | 系统回滚 | | | | | 查看版本总览 | | | | | 配置告警规则 | | | | | 发布 / 下线客户端版本 | | | | | 客户端版本回滚 | | | | | 推送强制更新标记 | | | | | 查看客户端版本分布与活跃榜 | | | | | 查看审计日志 | | | | | 导出审计日志 | | | | | 管理员账号管理 | | | | | 强制登出管理员 | | | | | 配置 IP 白名单 | | | |


7. 租户状态机

[新建中 Creating]
      ↓ 成功
[活跃 Active] ←──────────────────┐
      ↓ 手动 / License 到期挂起      │ 到期自动恢复(仅手动挂起且设置了到期时间)/ 手动恢复
[已挂起 Suspended] ───────────────┘
      ↓ 运营/PA 发起注销申请PA-011
[待审批注销 Pending Cancellation]
      ↓ 驳回(第二名 PA→ [已挂起 Suspended]
      ↓ 批准(第二名 PAMFA
[待清除 Pending Delete](冷静期 30 天)
      ↓ 双人 MFA 撤销注销 → [已挂起 Suspended]
      ↓ 冷静期届满(自动)/ 提前手动硬删除MFA
[已删除 Deleted]

注意Active / Suspended 状态下均可发起注销申请(后者更常见)。不允许直接跳过 SOP 从任何状态进入 Pending Delete 或 Deleted。


8. 不构建清单What We're NOT Building

请求/功能 原因 重新评估条件
自动化账单与发票 财务模块独立立项 财务模块 PRD 完成后接入
租户端自助迁移工具 当前规模不需要 租户数 > 500 时重新评估
平台管理后台移动端 运营场景明确为 PC v2 规划,用户调研支持时推进
Webhook 事件推送市场 集成复杂度高,无客户驱动 有 3+ 客户明确需求时评估
多语言管理界面 内部团队中文已满足 国际化扩张时规划
macOS / Linux 客户端 99% 用户为 Windows 市场需求出现时评估
移动端客户端 App v2 规划 v2 启动时
客户端离线模式 联网使用为既定形态 暂不考虑
客户端代码混淆 / 反逆向 优先功能交付 安全审计要求时启动
响应客户数据导出请求 暂缓 后续迭代排期时细化

9. 发布计划

阶段 时间 范围 通过标准
内部 Alpha Week 14 平台内部团队 核心租户 CRUD 流程无 P0 BugMFA 可用;客户端发布流程闭环
封闭 Beta Week 56 运营团队日常使用 + 1 家种子客户的客户端 备份/恢复完整可用;审计日志 100% 覆盖;客户端自动更新成功率 ≥ 95%
正式上线 Week 7 全量运营团队 + 全部客户的客户端 升级/回滚验证通过;监控告警规则配置完成;客户端版本一致性 ≥ 95%

回滚标准

  • 正式上线 72 小时内发现租户数据隔离漏洞或审计日志丢失 → 立即回滚平台管理后台
  • 客户端版本上线 24 小时内:自动更新失败率 > 5%、白屏 / 崩溃率 > 2%、或收到 P0 安全报告 → 立即下线该版本并恢复上一稳定版本

10. 技术考量(指引性)

本节为产品视角对技术决策的影响概述,详细方案请见各技术文档。

维度 关键依赖 备注
多租户隔离 django-tenants 平台管理后台数据落 public schema跨租户查询走 public 维度
异步任务 Celery + Celery Beat 创建租户、备份、导出、定时挂起检查等
数据库备份 PostgreSQL pg_dump(待评估流式方案) 大租户备份耗时风险
文件存储 Cloudflare R2 备份、导出包、客户端安装包
监控 Sentry + Grafana 已在技术栈中规划
MFA django-otp + TOTP 待最终选型
客户端 Electron + electron-updater TECH_STACK/平台管理后台技术方案.md
客户端心跳/活跃统计 public.client_heartbeatsUpsert + 24h 活跃口径,见 ADR-20260430-007 是租户活跃榜与版本分布的数据源
客户端 API 命名空间 统一 /api/release/...(见 ADR-20260430-009 与租户客源管理 apps/client/ 命名空间隔离

待解决问题(开发启动前必须确认)

  • 数据库备份方案:pg_dump 直接执行还是基于 WAL 的增量备份(如 pgBackRest— Owner: 工程负责人
  • 监控数据来源Grafana 直接对接 PostgreSQL 还是通过 Prometheus Exporter— Owner: 运维团队
  • MFA 库选型:django-otp + TOTP 还是集成第三方认证?— Owner: 工程负责人
  • 审计日志存储:写入 public schema 还是独立日志服务(如 Elasticsearch— Owner: 工程负责人
  • 客户端 EV 代码签名证书采购主体与预算 — Owner: IT 负责人
  • CI/CD 平台选型(客户端构建签名流水线)— Owner: 运维负责人
  • 客户端便携版Portable ZIP是否纳入 v1 — Owner: PM
  • 客户端启动时租户 URL 分发方式(统一域名重定向 vs 内置配置文件)— Owner: 产品 + 工程

11. 附录

11.1 术语表

术语 定义
Platform Admin 平台超级管理员,拥有所有高危操作权限
运营人员 平台日常运营,承担租户管理、监控巡检
只读审计员 仅查询与导出审计日志,无写权限
Tenant Admin 租户内的最高权限用户,对平台管理后台无访问权限
Tenant Code 租户唯一可读短码,用作租户访问 URL 中的 tenant= 参数
灰度升级 先对内测租户升级、验证通过后再全量推送
数据导出 输出结构化数据 + 文件 CDN URL 清单,分钟级,不含文件实体
完整备份 数据库 + 文件实体的完整副本,小时级,用于灾难恢复与租户迁移
SemVer 语义化版本控制 主.次.补丁
EV 证书 Extended Validation 代码签名证书
SHA256 用于校验客户端安装包完整性的散列算法

11.2 关联文档

类型 文档
项目入口 README.md
开发约束 AGENTS.md
MVP 范围 PRD/PRD_MVP.md
客户端技术方案 TECH_STACK/平台管理后台技术方案.md
Public Schema 数据模型 DATA_MODEL/DATA_MODEL_PUBLIC.md
ADR ADR.md(含 ADR-20260502-001:本 PRD 合并决策)