02 三级权限作用域 本节摘要:第 01 节的四档管「能不能进」,这一节管「进来能干啥」。OpenWork 的令牌带三级权限作用域(scope):所有者(owner)、协作者(collaborator)、查看者(viewer)。本节讲清这三级如何分级、各自的权力范围、为什么需要「协作者」这个中间态。 一、令牌的 scope:权力范围 一个令牌除了标识「你是谁」,还带一个 scope(作用域),表示「你能干什么」。
本节摘要:第 01 节的四档管「能不能进」,这一节管「进来能干啥」。OpenWork 的令牌带三级权限作用域(scope):所有者(owner)、协作者(collaborator)、查看者(viewer)。本节讲清这三级如何分级、各自的权力范围、为什么需要「协作者」这个中间态。
一个令牌除了标识「你是谁」,还带一个 scope(作用域),表示「你能干什么」。OpenWork 的令牌有三级 scope:
| scope | 含义 | 权力 |
|---|---|---|
| owner(所有者) | 工作区所有者 | 全部权限,含管理(签发令牌、改配置) |
| collaborator(协作者) | 协作者 | 读写,但不能管理 |
| viewer(查看者) | 查看者 | 只读(强制) |
令牌 = { id, scope: owner|collaborator|viewer, ... }
scope 在令牌签发时确定,之后每次请求带这个令牌,服务端按 scope 决定允许什么操作。
owner 是最高 scope,拥有全部权限:
owner 通常是工作区的「主人」——他创建了工作区,自然有全部权限。
collaborator 是中间 scope:
为什么需要这个中间态?考虑团队协作场景:
collaborator 正好——「能干活但不能管」。这是团队协作的合理权限。
viewer 是最低 scope,强制只读:
viewer 适合「给别人看但不让改」的场景:
把三级放一起,分级逻辑很清晰:
权限范围:owner > collaborator > viewer │ ├─ owner: 读写 + 管理 ├─ collaborator: 读写(无管理) └─ viewer: 只读(强制)
这种分级覆盖了常见的协作角色:主人(owner)、队友(collaborator)、观众(viewer)。
scope 在令牌签发时确定。令牌的形态大致是:
令牌字符串: owt_<随机ID>(明文,只返回一次) 落盘存储: { id, hash(哈希后的), scope, createdAt, label? }
注意几点:
scope(本节)和鉴权模式(第 01 节)协作决定「能不能做某操作」:
请求带令牌(某 scope) │ ▼ 1. 鉴权模式检查(第 01 节):这个路由要哪种 auth? │ ├─ 不符 ──► 401/403 │ ▼ 2. scope 检查(本节):这个操作要哪个 scope? │ ├─ 管理操作 ──► 要 owner │ ├─ 写操作 ──► owner 或 collaborator(viewer 拒) │ └─ 读操作 ──► 任意 scope │ ▼ 都过 ──► 执行
鉴权模式管「能不能进这个路由」,scope 管「进来后能不能做这个操作」。两层叠加,精细控制。
scope 讲清了,下一节讲最硬核的——viewer 的「强制只读」如何在反代层把关。