子账号与 RBAC
子账号用于把控制台访问拆给多人:创建 accountId 并分配 owner/admin/operator/viewer 角色,鉴权使用 X-Admin-Account + X-Admin-Token。根凭据 X-Admin-Secret 仍可全量读写,且不出现在账号列表中。
概念
| 角色 | 能力 | 约束 |
|---|---|---|
owner | 全部权限,含创建/变更 owner | 不可停用/降级最后一个启用中的 owner |
admin | 管理应用与运营对象、管理低阶账号 | 不能改 owner 账号 |
operator | 日常运营写操作 | 不能管理账号与高危配置(由能力矩阵约束) |
viewer | 只读 | 写接口返回 403 / 1003 |
- 账号上限 200;Token 只在创建与
rotateToken=true时返回一次,服务端只存 SHA-256 摘要。 - Token 轮换后旧 Token 立即失效;删除账号需 role ≥ admin,owner 账号仅 owner 可删。
- 角色变更受层级约束:admin 不能修改 owner;owner 角色变更需 owner 操作。
- 控制台把账号与 Token 保存在本机会话中;不要把 Token 写进前端代码或仓库。
前置条件
- 服务端已启动(默认
http://127.0.0.1:8080),控制台入口http://127.0.0.1:8080/console/#accounts(tab#accounts:成员与权限)。 - 请求头
X-Admin-Secret与服务端IM_ADMIN_SECRET一致(本地默认dev-admin)。 - 已在控制台选中应用;带
{appkey}的接口都按应用隔离。 - 自托管版无购买、计费、套餐、续费与发票流程(不适用项);本页只覆盖配置、查询与治理接口。
- 建议先创建一个备用 owner,避免唯一 owner 丢失导致无法管理账号。
步骤
- 创建子账号
提交
{accountId,name?,role};响应中的token仅本次可见,立即交付给使用者。 - 分配最小角色
只读同学给 viewer;日常运营给 operator;需要改配置/账号再给 admin。
- 轮换或停用
怀疑泄露时
rotateToken=true;离职立即disabled=true或删除。 - 验证权限
用
X-Admin-Account+X-Admin-Token调一个写接口;viewer 应返回 403/1003。
参数表
| 操作 | 方法与路径 | 请求体 / 参数 |
|---|---|---|
| 账号列表 | GET /api/admin/accounts | —(不含 Token 摘要) |
| 创建账号 | POST /api/admin/accounts | {accountId,name?,role} |
| 更新账号 | POST /api/admin/accounts/{accountId} | {name?,role?,disabled?,rotateToken?} |
| 删除账号 | DELETE /api/admin/accounts/{accountId} | — |
| 子账号鉴权 | 所有 /api/admin/** 请求 | X-Admin-Account + X-Admin-Token |
示例
创建 viewer → 用子账号只读 → 轮换 Token
Shell
curl -sS -X POST "http://127.0.0.1:8080/api/admin/accounts" \
-H 'X-Admin-Secret: dev-admin' \
-H 'content-type: application/json' \
-d '{"accountId":"ops-li","name":"李运营","role":"viewer"}'
# 用返回的 token(仅本次可见)
curl -sS "http://127.0.0.1:8080/api/admin/apps" \
-H 'X-Admin-Account: ops-li' \
-H 'X-Admin-Token: <token>'
curl -sS -X POST "http://127.0.0.1:8080/api/admin/accounts/ops-li" \
-H 'X-Admin-Secret: dev-admin' \
-H 'content-type: application/json' \
-d '{"rotateToken":true}'
curl -sS -X DELETE "http://127.0.0.1:8080/api/admin/accounts/ops-li" \
-H 'X-Admin-Secret: dev-admin'常见问题
Token 丢了怎么办?
无法找回,只能 rotateToken=true 重新签发;旧 Token 立即失效。
为什么 viewer 也能看到应用列表?
viewer 是只读角色,读接口允许;写接口返回 403/1003。
可以删除最后一个 owner 吗?
不可以。服务端拒绝停用/降级/删除最后一个启用中的 owner,避免失去管理入口。
根密钥还要保留吗?
建议保留在密钥管理系统作为应急入口,但日常操作使用子账号以便审计到人。