首页 / 多租户与 webhook

多租户与 webhook

GitHub App(webhook 来源)

  1. GitHub → Settings → Developer settings → GitHub Apps → New GitHub App;
  2. 权限最小集(全部只读):Metadata、Contents、Pull requests、Checks、Statuses、Administration:read; 不申请任何 write 权限——系统无 merge 权限是设计原则;
  3. 订阅事件五种:installation、installation_repositories、 pull_request、check_run、status;
  4. Webhook URL:https://你的域名/api/mu/github/webhook; secret 填 MU_GITHUB_WEBHOOK_SECRET 的同值;
  5. 把 App ID 与私钥填入 .env 的 MU_GITHUB_APP_ID / MU_GITHUB_APP_PRIVATE_KEY。

OAuth App(用户登录)

另建一个 OAuth App(Settings → Developer settings → OAuth Apps), callback 填 https://你的域名/api/mu/auth/oauth/github/callback, 凭据填 MU_GITHUB_OAUTH_CLIENT_ID/SECRET。

installation → 租户注册

用户安装 App 后跳转回控制台,系统把该 installation 注册到当前会话所属租户。 事件租户随 installation 走:不同租户应使用不同 GitHub 账号/组织安装, 同名仓库天然按租户隔离。

邀请与认领

  1. 管理员按目标用户的 GitHub 数字 user id 创建邀请 (POST /api/mu/invitations,role + TTL);
  2. 目标用户走 GitHub OAuth 登录,系统按 subject 自动认领唯一待认领邀请;
  3. 同一 subject 多条待认领邀请时会显式拒绝(invitation_ambiguous), 不会静默选择;
  4. platform_admin 不可经邀请授予——API 403、claim 拒绝、DB 约束三层拦截。

撤权语义

管理员撤销成员后,该用户所有会话下一请求立即 403 (逐请求活成员校验);其租户内数据保留不动。

事件→审查管线

PR 事件 → webhook(HMAC 验签+投递去重) → 事件入队 → 自动 consumer
→ 审查流水线 → check run 回写 PR → 结论与证据落租户

投递去重:同一 delivery 重复投递返回 duplicate,不重复处理; check run 回写为系统对 GitHub 的唯一"写"(内容只读原则不变)。