52 KiB
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.md(v1.3,已删除,被本 PRD 替代)PRD/发布管理/客户端发布管理模块PRD.md(v1.2,已删除,被本 PRD 替代)决策依据:
ADR-20260502-001(REQ)。
1. 问题陈述
1.1 背景
Fonrey(房睿)是面向房产经纪公司的 B2B SaaS 平台,采用 django-tenants 实现 PostgreSQL Schema 级别多租户隔离,同时通过 Electron 桌面客户端为终端经纪人提供统一入口。随着平台商业化推进,平台运营团队需要一套独立、跨租户的「平台管理后台」(Platform Admin Console)来统一承担:
- 租户全生命周期管理(开通、挂起、注销、License 续期)
- 平台版本治理(基础数据版本、租户数据版本、灰度升级、回滚)
- 数据备份与恢复(灾难场景应对)
- 客户端发布治理(桌面客户端版本上线、强制升级、版本分布监控)
- 操作审计与合规
- 平台管理员账号与安全(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 个系统内置业务角色(置业顾问、店管、区管、区总、副总、总经、其他职能),并完成角色—权限绑定
- 权限定义(PermissionDef):注入平台所有权限码定义(
- 初始 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 A3:License 时效管理与到期自动挂起
作为运营人员(或 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:租户注销 SOP(Tenant 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安装包,并填写:- 版本号(SemVer:
X.Y.Z,自动校验格式) - 版本类型(普通更新 / 强制更新)
- 最低兼容版本(低于此版本的客户端将被强制升级)
- 更新日志(Markdown,最多 2000 字,对外展示)
- 内部发布说明(不对外)
- 版本号(SemVer:
- 支持版本状态:草稿(不对外生效)/ 已发布 / 已下线
- 上传成功后,系统自动计算 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 |
| 联系邮箱 | ❌(可选) | 发送欢迎邮件;无邮箱改用 PDF 下载 | |
| 所在地区 | Select | ✅ | 省市两级 |
| 订阅套餐 | Select | ✅ | Basic / Professional / Enterprise |
| License 到期日期 | Date | ✅ | 到期后自动挂起 |
| License 授权用户数上限 | Number | ✅ | 用户数计费维度 |
创建流程:
- 表单校验通过后,后台异步任务执行:
- 创建 PostgreSQL Schema(
tenant_{id}) - 执行 Migrate 初始化表结构
- 注入默认配置(见下方「默认配置内容」)
- 生成初始密码(12 位随机),标记为「首次登录强制修改」
- 联系邮箱已填写时:发送欢迎邮件(含 Tenant Code、初始密码、平台访问链接)
- 创建 PostgreSQL Schema(
- 任务完成后更新租户状态为
active;失败则全量回滚并标记为failed - 生成唯一 Tenant ID(UUID)及 Tenant Code(12位纯数字,如
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 强制执行):
- 发起申请时必须填写注销原因
- 审批前强制完成数据导出确认(平台导出 Done 或客户自备份书面确认)
- 须第二名 Platform Admin(≠ 申请人)MFA 审批通过
- 软删除冷静期内可由双人 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)
- 自动触发:升级前系统对参与租户全量备份
- 手动触发:管理员可在租户详情页发起
- 内容:数据库 Schema(pg_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 同步变化(页面 5–10)
- 租户详情「备份记录」中点击「恢复」→ 出现二次确认弹窗 + 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]
↓ 批准(第二名 PA,MFA)
[待清除 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 1–4 | 平台内部团队 | 核心租户 CRUD 流程无 P0 Bug;MFA 可用;客户端发布流程闭环 |
| 封闭 Beta | Week 5–6 | 运营团队日常使用 + 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_heartbeats(Upsert + 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: 工程负责人 - 审计日志存储:写入
publicschema 还是独立日志服务(如 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 合并决策) |