访问控制 RBAC / ABAC 总览待审核
request · 四元组

授权请求:把一次访问拆成 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() 的输入

  
关键的心智切换:授权不是用户身上挂着的一个静态标签,而是「这一刻、这个人、对这个东西、做这件事」 这个具体组合的一次性判定。换言之 —— 授权是个函数,这四个槽位是它的参数02-who03-when-where04-what 三页逐个拆解前三个参数,05-decide 再加上 action,把它们合起来运行判定。

同一个元组,换套术语就是另一个系统

这四个轴不是本系列发明的。主流授权系统全都围绕它构建,只是给它们起了不同的名字。 认出这层「同构」,阅读任何权限框架的文档都会容易很多:

系统whoactionwhatwhen/where
本系列subjectactionresourcecontext
XACMLSubjectActionResourceEnvironment
AWS IAMPrincipalActionResourceCondition
OPA / Regoinput.userinput.actioninput.resourceinput.*
Cedarprincipalactionresourcecontext
四个轴的术语对照表。applications 页会展开每套系统的真实写法。
为什么 when/where 单独成一轴?因为它既不属于「人」也不属于「物」—— 几点钟、从哪个 IP、什么设备,这些是请求发生的现场。把它和 who / what 并列, 是 ABAC 相比 RBAC 最实质的一步扩展:让授权能纳入时间与环境条件。