首页 / 多租户与 webhook
多租户与 webhook
GitHub App(webhook 来源)
- GitHub → Settings → Developer settings → GitHub Apps → New GitHub App;
- 权限最小集(全部只读):Metadata、Contents、Pull requests、Checks、Statuses、Administration:read; 不申请任何 write 权限——系统无 merge 权限是设计原则;
- 订阅事件五种:
installation、installation_repositories、pull_request、check_run、status; - Webhook URL:
https://你的域名/api/mu/github/webhook; secret 填MU_GITHUB_WEBHOOK_SECRET的同值; - 把 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 账号/组织安装, 同名仓库天然按租户隔离。
邀请与认领
- 管理员按目标用户的 GitHub 数字 user id 创建邀请
(
POST /api/mu/invitations,role + TTL); - 目标用户走 GitHub OAuth 登录,系统按 subject 自动认领唯一待认领邀请;
- 同一 subject 多条待认领邀请时会显式拒绝(
invitation_ambiguous), 不会静默选择; platform_admin不可经邀请授予——API 403、claim 拒绝、DB 约束三层拦截。
撤权语义
管理员撤销成员后,该用户所有会话下一请求立即 403 (逐请求活成员校验);其租户内数据保留不动。
事件→审查管线
PR 事件 → webhook(HMAC 验签+投递去重) → 事件入队 → 自动 consumer
→ 审查流水线 → check run 回写 PR → 结论与证据落租户
投递去重:同一 delivery 重复投递返回 duplicate,不重复处理;
check run 回写为系统对 GitHub 的唯一"写"(内容只读原则不变)。