d2d2d29c34
新建 backend/packages/harness/deerflow/persistence/workspace_membership/
{__init__.py, model.py},注册到 Base.metadata。
WorkspaceMembershipRow schema(来自 workspace-schema-design §2.2 锁定版):
- workspace_id String(36) FK workspaces.id ON DELETE CASCADE — PK part
- user_id String(36) FK users.id ON DELETE CASCADE — PK part
- role String(16) NOT NULL(Stage 0 仅写 'owner',schema 允许 'admin'/'member'
为 Stage 2 RBAC 准备)
- invited_by String(36) FK users.id ON DELETE SET NULL nullable(Stage 2
invitation 流程用)
- joined_at DateTime(tz=True)
索引:
- idx_workspace_memberships_user (user_id, workspace_id) — 倒查索引让
/auth/me 列 user 所属 workspaces 走索引
- idx_one_owner_per_workspace partial UNIQUE on workspace_id WHERE role='owner'
—— 一 workspace 严格 1 个 owner;sqlite_where + postgresql_where 双驱动
并存(实测两边都识别)
Stage 0 PR3 T3.6(提前到 T3.4-T3.5 之前;WorkspaceRepository.list_by_user
等会 JOIN 这张表)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>