Table of Contents

权限模型

管理面权限=scope(命令族×读写)+租户绑定二元组的声明制模型。

密钥三元组

AdminKey = ( Token, Scopes, TenantBinding )
组成 语义
Token Bearer 载体(worker.json admin.keys 或租户登录密钥)
Scopes 授权集:{命令族}:{read|write},* 通配
TenantBinding 可绑租户段——绑定后仅该租户的 {tenant} 路由可达

系统令牌(平台面,密钥文件配置)与租户令牌(登录密钥签发,自动绑定租户)共用本模型。

scope 词表

scope 的"命令族"即契约源 tags(29 族):config:write、config:read、 publish:write、cluster:read、plugin:write、sys:*、*(全权)……

  • 读(GET)要 {族}:read,写(POST/PUT/DELETE)要 {族}:write;
  • 零副作用 POST(dry-run/simulate 等只读语义)按契约标注为 read——不需要 write scope;
  • 生命周期动词(plugin enable/disable)按契约标注执法。

403 语义(结构化信封)

{ "code": "KernLab.Traffic.Auth.Scope",
  "message": "…需要 publish:write…", "traceId": "…" }
信封 code 语义
KernLab.Traffic.Auth.Scope 缺 scope(信封里指明缺什么)
KernLab.Traffic.Auth.TenantScope 租户边界越界(实例级路径/他租户资源)

403 不是裸文本——自动化按 code 分支处理;message 面向人。

whoami(身份投影)

curl -H "Authorization: Bearer $KEY" http://127.0.0.1:7901/api/v1/sys/whoami

返回 {kind, tenant, masks, scopes}——masks=族→操作位掩码、scopes=字符串原形 (审计对账用)。鉴权通过即可访问 whoami(免 scope)——探活身份的第一站。

租户登录密钥

租户可自签发子密钥(key 命令族:issue/list/revoke/delete):

  • 明文一次性展示(tc_live_…),仅存指纹;
  • scopes ≤ 签发者、自动绑定本租户;
  • 吊销即时生效(轮询窗内)、有效期原生 TTL;
  • lastUsedAt 双键分离(审计可见最后使用时刻)。

组件级执法(控制台)

UI 导航按身份 kind×scope 动态下发(无权限的功能不渲染);组件级功能点由 v-perm 唯一原语控制(禁用/隐藏两形态)——权限模型单一来源,无前端独立判断逻辑。