共用任务与媒体
三个创作子站的公共运行能力、数据隔离、结果存储和授权边界
本页补充产品工程的目标约定,尚未完成迁移或跨服务验收。三个子站共用一个 Next.js 应用和公共能力;现有实现及历史部署不等于已符合这些约定。
职责归属
| 对象或能力 | 权威归属 | 其他服务如何使用 |
|---|---|---|
| 用户、会话、角色、余额、价格快照、资金流水 | 平台 | 产品查询身份与权限,调用平台记账 |
| 产品项目、文档、分镜、素材关系、候选选择和业务任务 | 产品工程 | 按平台用户 ID 和产品归属验证访问 |
| 产品上传、素材版本、长期保存的创作结果、对象存储配置 | 产品工程的共用媒体模块 | 子站经同一模块上传、保存、读取与保护引用 |
| 平台客户任务、模型操作和开发者 API 结果授权 | 平台 | 产品保存平台任务引用;开发者从平台访问本人结果 |
| 供应任务、Provider 查询、结果获取及供应侧对象 | 媒体网关 | 平台以服务凭据读取,客户不访问内部管理接口 |
平台不建立通用创作 Project、组织成员或共享资产领域。产品共用存储代码不表示所有用户或子站能互相读取素材。
同一应用内的数据隔离
- 每个业务对象记录所属用户与产品;项目表按产品分组,公共任务和媒体表也必须保留作用域。读取、修改、结果登记和下载都在服务端校验归属,不能仅依靠页面路由或客户端传来的产品名。
- 子站入口由受控域名映射确定,Worker 使用任务中保存的产品归属;未登记的 Host 不成为新产品作用域。三个子站分别校验产品管理员角色。
src/shared/放共用实现,src/products/*放产品规则。跨产品素材复用需要明确的授权操作和引用关系,不因共用 PostgreSQL 自动开放。
上传与结果交付
- 用户上传由产品后端确认用户、项目和产品归属,再创建上传记录及受限上传凭据。浏览器不持有对象存储长期密钥;上传完成校验后才登记为可用素材。
- 模型调用仍通过平台。参考素材以供应协议支持的受限引用传递,不将产品存储凭据交给网关或供应商。平台 API 的独立开发者上传需求单独审计,不依赖 Studio 登录或数据库。
- 媒体网关取得供应结果并登记原任务。平台验证客户任务归属后交付客户结果;不得把供应管理 Token、任意内部对象 Key 或供应商临时链接作为永久公开资产。
- 产品共用媒体模块将需要长期保留的结果登记为产品素材,保存稳定引用与来源任务。是否需要复制物理对象,按保存期限与引用授权能力在验证后确定;不能依赖即将到期的 URL。
- 获取或保存失败只重试原结果的读取与登记。任务显示可恢复的结果保存状态,原生成成功事实与费用保留。
生成 Worker、媒体保存和平台结算各有持久状态及幂等回执;浏览器离开后仍能恢复。任务恢复采用原任务身份和租约,不重复创建付费任务。
文件访问与保留
- 产品媒体入口校验产品、用户与引用归属后读取对象或签发短期链接;开发者 API 的结果由平台校验客户任务归属。平台账户停用不等于可以直接删除历史创作或资金证据。
- 删除业务引用、删除物理对象和取消任务分别处理。仍被作品、候选、在途任务或历史记录引用的对象不能因单个页面删除而清理。
- 网关保存供应对象,产品保存创作对象,分别执行各自的保留与备份规则。共同桶、复制策略和保留期限需要验证后确定;本次没有变更已有桶、密钥或清理器。
- 旧网关文档中“Core 持有 file_id、所有产品经 Core 上传”的方案已被当前归属替代。历史对象、在途任务及来源证据保留,不能把该计划恢复成新系统前置。
验证场景
上传后刷新可读、跨用户和跨产品越权拒绝、过期链接可重新授权、网关成功后产品保存失败可恢复、Worker 重启不重做生成、仍有引用的对象不会提前删除。具体场景纳入平台集成验证。