权限范围(scope)
类型化目录中恰好有 23 个 scope:俱乐部 14 个、联盟 9 个。路由声明的 scope 必须全部满足。缺少 scope 元数据会作为服务端接线错误失败关闭;/v1/me 和 /v1/club/profile 明确要求有效签名但不要求业务 scope。只有 /health 完全公开。
俱乐部 scope
| Scope | 能力 |
|---|---|
club.contacts.read | 脱敏人员列表、时间线和家庭 |
club.contacts.read_pii | 未脱敏人员资料;每次审计 |
club.contacts.write | 人员和家庭写操作 |
club.compliance.read | 合规、签署状态、模板、同意和限制 |
club.compliance.read_files | 短时签名文件 URL;每次审计 |
club.compliance.write | 创建/预览/操作签署请求及续签 |
club.safety.read | 事故摘要、参赛限制和证书 |
club.safety.read_sensitive | 完整事故详情;每次审计 |
club.safety.write | 事故、证人和员工证书写操作 |
club.billing.read | 发票、收款单和产品;只读 |
club.messages.read | 消息、收件人和模板;只读 |
club.coaches.read | 教练准入卡和证书 |
club.coaches.write | 邀请/暂停/恢复/吊销教练准入 |
club.federations.read | 俱乐部联盟会籍和共享状态 |
联盟 scope
| Scope | 能力 |
|---|---|
federation.members.read | 成员俱乐部和治理视图 |
federation.aggregate.read | 合规/报名/总览聚合 |
federation.people.read | 联盟人员名册 |
federation.people.write | 登记/更正/启用/停用人员 |
federation.audit.read | 联盟审计流 |
federation.safety.read | 联盟层事故/移除;敏感详情审计 |
federation.compliance.read | 联盟证书/合规视图 |
federation.memberships.read | 会籍申请和会籍 |
federation.rules.read | 数据共享规则和同意状态 |
授权结果是 workspace scope 目录与发放者已有 Academy 人工权限的交集。订阅限制已明确延期;套餐、状态、模块、费率和自由 JSON 值都不是权益证据。五个俱乐部 scope 仅可由当前俱乐部的真实 OWNER 授予:club.compliance.read_files、club.safety.read_sensitive、club.coaches.read、club.coaches.write、club.federations.read。OWNER 证据独立解析自发放者与精确目标俱乐部 tenant 之间有效、未删除的 Role(type=STAFF, subtype=OWNER) 行。ADMIN、自定义 wildcard 持有者和其他俱乐部的 OWNER 均不能授予;* 永远不会被当作角色。匹配的 OWNER 最多可授予全部 14 个俱乐部 scope,非 OWNER wildcard 仍最多只有 9 个普通俱乐部 scope。宽泛的安全 scope 同时要求事故/移除模块与可独立配置的凭据登记模块。联盟人员、安全和合规访问仍必须有明确的员工矩阵证据;联盟管理员和 * 都不能替代该证据。
目录展示、创建和更新使用同一个服务端可授予列表。API key 只获得持久化的明确 scope 和精确 workspace 绑定,不继承 OWNER。失去 OWNER 不会静默撤销既有 key:非 OWNER 管理者可以严格缩小 scope 作清理,但不能重新提交相同的不可授予集合、把一个 OWNER 专属 scope 替换成另一个或新增它。轮换只保留既有 scope,不会扩大 scope。
Academy 控制面的 .../partner/credentials/scopes 响应保留顶层 scopes 作为可授权列表,并新增 groups,按稳定顺序返回该 workspace 的完整目录。分组只含本地化 key,不含通配符或逐项 grantable 标记。分组标签使用 partner.scopeGroup.<group-id>.label;每个 scope 使用 partner.scope.<scope>.label 和 partner.scope.<scope>.description。UI 描述必须明确说明 PII、文件、敏感安全数据和审计访问。未来仅服务端使用的订阅上限一旦启用,在缺少证据时必须传入 [];请求 DTO 不接受该上限。