授权请求:把一次访问拆成 who / when·where / what / action
先不讨论「准不准」(那是 05-decide 的主题)。先看输入的形状:无论多复杂的权限系统,
每一次访问检查,最终都要先装配一个授权请求 —— 一个固定四个槽位的元组。
把它传入判定函数 decide(...),才谈得上 permit / deny。
who
when/where
what
action
● who —— 谁在发起 (subject)
● action —— 想做什么动作
● what —— 对哪个资源 (resource)
● when/where —— 在什么情境下 (context)
10:00
装配好的授权请求 (四元组)
authorizationRequest 这就是要交给 decide() 的输入
同一个元组,换套术语就是另一个系统
这四个轴不是本系列发明的。主流授权系统全都围绕它构建,只是给它们起了不同的名字。 认出这层「同构」,阅读任何权限框架的文档都会容易很多:
| 系统 | who | action | what | when/where |
|---|---|---|---|---|
| 本系列 | subject | action | resource | context |
| XACML | Subject | Action | Resource | Environment |
| AWS IAM | Principal | Action | Resource | Condition |
| OPA / Rego | input.user | input.action | input.resource | input.* |
| Cedar | principal | action | resource | context |