# 商业化多组织、多工作区设计 ## 目标 `ai-drama-platform` 的商业形态不是“一个剧集的生产页面”,而是一个可以私有部署、承载多个内容公司的 AI 短剧/漫剧生产中台。所有生产数据都必须从组织和工作区上下文开始,任务、资产、审片和交付都不能脱离租户边界。 本地 MVP 使用 Node 24 内置 `node:sqlite`,已经接入邮箱 + 密码登录、scrypt 密码哈希和 Bearer session。仅在显式设置 `AI_DRAMA_ALLOW_DEV_CONTEXT=1` 的本地调试场景下,才允许请求头模拟上下文;默认运行模式是 session-only。后续替换为 SSO/OIDC 时,只需要替换身份解析层,不改变业务表和 scope 查询。 ## 产品层级 ```text 用户 User └── 组织 Organization(公司 / 内容厂牌 / 客户租户) ├── 组织成员 Organization Member ├── 套餐、账单、配额、策略 └── 工作区 Workspace(制作部 / 项目组 / 客户空间) ├── 工作区成员 Workspace Member ├── 项目 Project(系列 / 模板 / 客户项目) │ ├── 季 / 集 / 剧本 / 资产锁 / 分镜 │ ├── 生成任务 / 尝试记录 / 审片 / 合规 │ └── 交付版本 / 发布渠道 └── 模型连接器、Runner、资产存储策略 ``` 组织解决客户和计费隔离,工作区解决团队协作隔离,项目解决内容访问和交付隔离。一个用户可以加入多个组织,在同一组织中进入多个工作区;项目默认继承工作区成员,但敏感项目可以额外配置 project member。 ## 角色模型 | 作用域 | 角色 | 典型能力 | | --- | --- | --- | | 组织 | `org_owner` | 组织设置、成员、账单、模型策略、全项目可见 | | 组织 | `org_admin` | 成员、工作区、模型和审计管理 | | 工作区 | `producer` | 建项目、排队、批次、成本、交付审批 | | 工作区 | `writer` | 剧本、分集、对白、镜头草稿 | | 工作区 | `art_director` | 角色/场景/道具锁、参考图、prompt、连续性 | | 工作区 | `voice_editor` | 声线锁、TTS、字幕、ASR 对齐 | | 工作区 | `reviewer` | QA、审片意见、通过/驳回 | | 项目 | `project_editor` | 指定项目内容编辑 | | 项目 | `project_viewer` | 只读查看、下载被授权的交付物 | 权限不是写死在前端。API 根据 `organization_members`、`workspace_members`、`project_members` 合并角色权限,并在每个项目、任务、模型、交付接口执行检查。前端显示权限矩阵只是帮助用户理解,不能作为安全边界。 ## 数据表 ### 身份和租户 - `users`:用户身份、显示名、邮箱、状态。 - `organizations`:租户、slug、部署模式、所有者。 - `organization_members`:用户加入组织的角色、邀请状态。 - `workspaces`:组织下的生产空间。 - `workspace_members`:工作区角色。 - `projects`:工作区下的系列、模板或客户项目。 - `project_members`:项目级额外授权。 - `invitations`:待接受邀请,不把邀请误当作已加入成员。 ### 生产和中台 - `series`、`seasons`、`episodes`:剧集结构。 - `assets`、`asset_versions`:角色、场景、道具、参考图、首尾帧、音频和视频资产版本。 - `shots`:分镜、首帧/末帧、镜头状态和 continuity lock 引用。 - `generation_jobs`、`job_attempts`:任务、重试、取消、执行器和输出。 - `reviews`、`review_comments`:审片 lane、QA gate、意见和决策。 - `model_connectors`:自有模型平台、HTTP JSON、OpenAI-compatible、ComfyUI optional adapter。 - `deliveries`:剪辑清单、字幕、封面、master 和发布渠道。 ### 商业治理 - `billing_accounts`:套餐、席位、存储、片段额度和云连接策略。 - `quota_allocations`、`usage_events`:配额和按任务的用量计量。 - `compliance_records`:原创/IP、肖像权、声音权、参考素材来源、单画面检查。 - `audit_logs`:谁在什么组织/工作区/项目中做了什么操作,以及结果和元数据。 ## 请求上下文 本地调试 bypass 使用以下请求头,缺省时使用种子账号和种子工作区;真实浏览器请求必须携带登录后的 Bearer session: ```text x-user-id: u-owner x-organization-id: org-studio-lab x-workspace-id: ws-local-aidrama x-project-id: thunder-mouth ``` 真实部署必须由登录会话或网关注入用户身份,禁止让客户端直接提交任意组织 ID 后绕过 membership 检查。API 的最小检查顺序是: 1. 用户存在且状态为 active。 2. 用户是组织成员,且组织状态可用。 3. 工作区属于当前组织,用户拥有工作区 membership。 4. 项目属于当前工作区,用户拥有项目 membership 或工作区角色允许继承访问。 5. 当前角色拥有该动作所需权限。 6. 记录 audit log,涉及生成、下载、模型调用和导出时记录 usage event。 ## AI 短剧生产的业务硬门 这些约束属于组织策略或项目策略,不能只放在 prompt 文本里: - `single_frame_only`:每个图片生成任务只能输出一张连续完整画面,拒绝 split-screen、漫画多格、storyboard、collage、contact sheet。 - `continuity_lock_required`:角色、服装、道具、场景、天气、镜头角度、声线必须有 lock 和 ledger。 - `actual_last_frame_chain`:后续视频优先引用上一段真实末帧,不能只引用描述性文本。 - `voice_lock_required`:对白使用固定声线;MiniMax H3 随机原生声音不作为最终角色声线。 - `mouth_safe_shot_policy`:口型不稳定时优先侧脸、背影、低头、远景、反应镜头或环境插入镜头。 - `local_runner_only`:默认只允许本地/自有模型;云端节点必须显式审批并留下审计记录。 ## MVP 与后续 当前可运行 MVP 先交付真实的租户、成员、权限、项目 scope、邀请、审计、用量和模型注册接口,生产资产表和任务表已经预留。下一阶段可以把认证、Redis/BullMQ 队列、对象存储、ffmpeg 合成和真实 Runner 接入,不需要重做组织模型。