源起:讨论 #52 。WP1 / 总纲 §64/§82 拆分项之一。父:#50 。
背景
M2 组织管理·成员链(链③)需要 control-plane 的成员管理面 。现 contracts/openapi/control-plane-v1.yaml 仅有只读 GET /v1/me/tenants(当前用户 membership 视图),无成员邀请/移除写面 。gateway #18 被阻塞。
要达成
路径形状 / 前缀(最终以契约为准,回应讨论 #52 第 4 点)
成员面 = 租户自管理 (apps/console 按角色门控,带 X-Tenant-Id ,require_tenant=true),非 admin 跨租户运营。
对外契约路径走 control-plane 既定 /v1/... 约定(应用内 /api/v1/...,网关 strip /api);建议 GET/POST /v1/orgs/members、DELETE /v1/orgs/members/{userId}。
前缀不混淆澄清 :管理面无租户前缀权威为 /admin/* (ICD §3.6 require_tenant=false,gateway#6),非 /api/v1/*。gateway M1 贯通主线 · 端到端集成(主仓 owner) #15 简报「M1 fix(gateway): control-plane 路由 require_tenant=false(共享控制平面跨租户管理) #45 设 /api/v1/* require_tenant=false」有误 ,应更正为 /admin/*。成员面是 require_tenant=true 的 /v1/* 租户隔离路由,与 /admin/* 天然不冲突。
责任 / 对接
起草:control-plane 工程师(producer)→ PR 到主仓 contracts/
评审:主仓 contracts 治理 + webui + gateway
解阻塞:hashmatrix-gateway#18(Blocked by 本 issue)
验收
oasdiff 加法兼容;registry 版本对齐;成员写真打 Keycloak(control-plane PG 不存成员凭据)。
背景
M2 组织管理·成员链(链③)需要 control-plane 的成员管理面。现
contracts/openapi/control-plane-v1.yaml仅有只读GET /v1/me/tenants(当前用户 membership 视图),无成员邀请/移除写面。gateway #18 被阻塞。要达成
contracts/openapi/control-plane-v1.yaml成员管理面(加法 MINOR)hashmatrix-control-plane)路径形状 / 前缀(最终以契约为准,回应讨论 #52 第 4 点)
apps/console按角色门控,带X-Tenant-Id,require_tenant=true),非 admin 跨租户运营。/v1/...约定(应用内/api/v1/...,网关 strip/api);建议GET/POST /v1/orgs/members、DELETE /v1/orgs/members/{userId}。/admin/*(ICD §3.6require_tenant=false,gateway#6),非/api/v1/*。gateway M1 贯通主线 · 端到端集成(主仓 owner) #15 简报「M1 fix(gateway): control-plane 路由 require_tenant=false(共享控制平面跨租户管理) #45 设/api/v1/*require_tenant=false」有误,应更正为/admin/*。成员面是require_tenant=true的/v1/*租户隔离路由,与/admin/*天然不冲突。责任 / 对接
contracts/验收
oasdiff加法兼容;registry 版本对齐;成员写真打 Keycloak(control-plane PG 不存成员凭据)。