11 KiB
ShareServer 功能逻辑设计
文档信息
| 项目 | 内容 |
|---|---|
| 状态 | 设计中 |
| 版本 | 0.3 |
| 日期 | 2026-09-09 |
| 关联 PRD | ShareServer PRD |
| 共享规则 | 共享网络总体设计 |
1. 核心不变量
INV-1 组织隔离先于角色
任何查询和变更先绑定 organization,再计算角色。系统管理员的跨组织操作使用独立系统管理 入口并形成审计,不能依靠省略 organization 条件获得全局数据。
INV-2 注册不等于发布
设备注册只建立身份和连接资格。没有有效 Publication 时,目录中没有该设备能力。
INV-3 目录不等于授权
看到能力不能推导可调用或可下载。创建任务和下载包时重新计算当前授权。
INV-4 服务端授权不能扩大端点授权
ShareServer 的 allow 只是签发任务资格。Provider 和调用方仍执行各自本地策略;任一端拒绝
即终止动作。
INV-5 策略拒绝优先
同一动作命中多个规则时使用 deny > require_approval > allow。没有匹配 allow 时默认 deny。
INV-6 联邦为双边交集
单方创建或接受的关系不生效。双方 active 且两端发布、Grant 和数据策略均允许时才能跨组织 创建任务。
INV-7 任务提供者不可改写
ShareServer 只路由调用方冻结的 provider,不在离线、繁忙或失败时替换节点。
INV-8 不恢复短期权威
备份恢复不恢复 Web 会话、设备 socket、一次性挑战、审批 nonce 或任务数据通道。终端必须 重新连接并证明身份。
INV-9 初始化入口一次性关闭
初始化只在实例尚无系统管理员时可用。首个系统管理员创建成功后,后续请求即使持有旧的 一次性引导材料也不能再次进入初始化流程。
INV-10 数字人发布不等于记忆公开
发布数字人只建立一个有界 Agent Publication。它默认不取得所有者任何本地记忆;所有者可以 在发布时勾选 Agent、Global、指定 Project 和指定 Automation 分区,不能开放 Conversation 和 Run 分区。ShareServer 和调用者只能看到允许分区种类与“本次调用会使用本地记忆”的政策 事实,不能读取原始条目、分区内容、来源正文或检索结果。新增可读分区按权限扩大重新审批, 移除分区可以立即收紧。
INV-11 服务端检查点不等于源文件已保存
ONLYOFFICE 保存只产生 ShareServer 权威的 DocumentCheckpoint。只有 Desktop 或远程
GoodBuddy Agent 校验源文件基准并完成原子替换后,源文件才是已保存状态。ShareServer 不根据
callback 成功推断本机或 SSH 文件已经更新。
INV-12 Office 凭据单用途
设备 API 凭据、编辑器一次性启动授权、ONLYOFFICE 文件令牌和 callback token 分别绑定不同 audience、单个文档会话和短期限。任何一种凭据都不能换取其他 API 权限。
2. 主要状态
2.1 成员
invited -> active -> suspended -> active
invited -> expired | revoked
active/suspended -> removed
suspended 不能登录或创建新任务;历史归属保留。removed 不级联删除审计和已完成任务。
2.2 注册设备
pending -> active <-> offline
pending -> expired | rejected
active/offline -> revoked
客户端心跳只决定 active/offline,不能清除 revoked。重新注册生成新设备 registration。
2.3 Publication
draft -> pending_approval -> active
draft/pending_approval -> rejected
active <-> paused
active/paused -> revoked
provider 离线不会把 Publication 变为 paused;目录同时展示“已发布”和“当前离线”两个事实。
2.4 审批
pending -> approved | rejected | cancelled | expired
审批对象内容摘要、申请主体或策略版本变化后,原审批不能复用。approved 只产生其声明范围内 的 Grant 或一次性决定。
2.5 Package Release
draft -> verifying -> available -> paused -> available
verifying -> invalid
available/paused -> revoked
发布后的版本和字节不可变。修复内容必须使用新版本;revoked 不删除审计证据和对象摘要。
2.6 FederationTrust
draft -> offered -> mutually_confirmed -> active
offered -> rejected | expired
active <-> paused
任意非终态 -> revoked
mutually_confirmed 只表示身份确认完成;双方策略同步成功后才进入 active。
2.7 DocumentEditSession
creating -> uploading -> ready -> editing
creating/uploading -> failed | cancelled | expired
ready/editing <-> offline
ready/editing/offline -> closing -> closed
任意非终态 -> revoked | expired
编辑内容使用独立状态维度:
clean -> dirty -> saving -> checkpoint_available
saving -> failed | outcome_unknown
checkpoint_available -> dirty
offline 不删除已确认 checkpoint。outcome_unknown 必须通过对象摘要和 callback 幂等键查询
同一次保存,不能自动创建另一份 checkpoint。
3. 授权计算顺序
- 验证请求身份、会话 audience 和 organization。
- 验证用户、设备、provider、Publication 和 FederationTrust 当前状态。
- 校验能力或数字人版本、动作、输入 schema、数据类别、大小和委托链。
- 收集调用方组织、提供方组织、Publication 和 Grant 规则。
- 按拒绝优先合并,计算
deny/require_approval/allow。 - 校验次数、并发、预算和有效期。
- 返回决定、稳定原因和策略引用;需要批准时建立内容绑定申请。
- 创建任务时再次计算,并把决定快照写入任务。
目录查询可以预计算“可能可用”,但不能替代第 1 至 8 步。
4. 组织角色边界
| 动作 | 系统管理员 | 组织管理员 | 发布者 | 审批人 | 审计员 | 成员 |
|---|---|---|---|---|---|---|
| 实例设置 | 是 | 否 | 否 | 否 | 只读有限项 | 否 |
| 成员与组 | 紧急管理 | 是 | 否 | 否 | 只读 | 自己 |
| 注册设备 | 只读/撤销 | 是 | 自己 | 否 | 只读 | 自己 |
| 发布能力/包 | 否 | 是 | 授权范围 | 否 | 只读 | 否 |
| 发布自己的数字人 | 否 | 是 | 授权范围 | 否 | 只读 | 自己 |
| 编辑策略 | 否 | 是 | 否 | 否 | 只读 | 否 |
| 处理审批 | 否 | 可配置 | 否 | 授权范围 | 只读 | 自己的申请 |
| 联邦关系 | 实例级许可 | 是 | 否 | 可共同审批 | 只读 | 否 |
| Office 服务配置 | 是 | 策略与会话管理 | 否 | 可配置 | 只读 | 使用获准服务 |
| 审计导出 | 实例级 | 组织级 | 自己相关 | 自己相关 | 授权范围 | 自己相关 |
实际权限仍由策略计算,表格定义产品默认职责而非硬编码角色名称。
5. 任务路由决策
| 条件 | 结果 |
|---|---|
| provider 在线且双方可直连 | 签发短期直连协商信息 |
| 无法直连且双方策略允许中继 | 建立有界中继通道 |
| 中继关闭或任一方禁止 | 创建失败,说明无可用路由 |
| provider 离线 | 不排队到无限期,按能力配置有界等待或拒绝 |
| provider 接受后连接中断 | 保留 task,等待同一 provider 恢复/查询 |
| provider 终态未知且恢复期结束 | outcome_unknown |
| 调用方取消 | 转发取消;provider 确认后终态 cancelled |
中继容量不足只产生排队或资源错误,不切换 provider,不改变是否允许中继。
6. 更新策略优先级
紧急撤销
> 组织强制固定版本/禁止版本
> 设备组发布通道
> 用户允许的版本范围
> 当前已安装版本
任何权限扩大都从自动路径转为 require_approval。降级只有在目标版本仍被签名目录允许且
策略明确指定时才提供,不自动视为故障回滚。
7. 联邦可见性
联邦目录只导出对方明确允许的能力投影:组织显示名、能力、版本范围、数据政策和可用性摘要。 不导出内部设备名、成员清单、组结构、节点地址、内部策略全文或审计记录。跨组织请求使用 双方关联 ID,双方各自解析本地主体。
8. 删除、撤销与保留
- 删除组织前必须停止新任务、撤销联邦和设备,并按保留策略归档审计;不提供无提示级联。
- 删除用户不删除其历史动作,审计显示不可变主体摘要。
- 撤销设备、Publication、Grant、Package 或联邦后立即阻止新令牌。
- 对象存储中的未完成任务正文按任务期限清理;审计元数据按组织保留策略清理。
- Office 会话关闭、撤销或到期后停止签发新启动、文件和 callback 令牌。工作副本与 checkpoint 按 Office 保留策略清理;法定保留只能保留匹配对象和审计,不能恢复会话权限。
- 法定保留只锁定匹配审计事件,不使被撤销身份重新可用。
8.1 Office 保存与回写结果
| 条件 | ShareServer 结果 |
|---|---|
| callback 通过验证且对象完整 | 原子发布新 checkpoint,通知 Desktop |
| callback 重复且幂等键相同 | 返回已有 checkpoint,不创建新版本 |
| callback 超时且对象结果未知 | outcome_unknown,查询确认后再转终态 |
| Desktop 确认源文件已写回 | 记录 source_commit_confirmed 元数据 |
| Desktop 报告源文件冲突 | 保留 checkpoint 至到期,记录 source_conflict |
| 设备或组织权限撤销 | 拒绝新操作并关闭会话,不删除 Desktop 源文件 |
9. 需求追踪
| 需求 | 主要逻辑 |
|---|---|
FR-1 |
INV-1、INV-9 和系统管理员角色边界 |
FR-2 |
组织隔离不变量、成员状态和角色边界 |
FR-3 |
注册不等于发布、设备状态和短期权威恢复规则 |
FR-4 |
注册、Publication、目录与授权不变量 |
FR-5 |
拒绝优先不变量和授权计算顺序 |
FR-6 |
审批状态、内容绑定和授权重算 |
FR-7 |
provider 冻结不变量和任务路由决策 |
FR-8 |
Package Release 状态和更新策略优先级 |
FR-9 |
联邦双边交集、FederationTrust 状态和联邦可见性 |
FR-10 |
组织隔离、删除撤销与保留规则 |
FR-11 |
组织角色边界及各对象状态;展示行为由 UI 设计定义 |
FR-12 |
短期权威恢复规则和逻辑完整性;部署结构由技术设计定义 |
FR-13 |
注册、Publication、目录与授权不变量,provider 冻结及 INV-10 |
FR-14 |
INV-11、INV-12、DocumentEditSession、Office 保存与保留规则 |
10. 逻辑完整性
本设计覆盖实例、组织、成员、设备、能力与数字人发布、授权、审批、任务、更新、联邦、Office 编辑、撤销和恢复。实现前仍需确定首个 OIDC 提供者矩阵、默认审计保留期、部署规模目标、中继 带宽上限、Office 文件上限和 checkpoint 保留期;这些部署参数应可配置,不改变拒绝优先、双边 联邦、provider 冻结、Office 凭据单用途和源文件权威规则。