系统设计 / 访问控制 · 从 RBAC 查表到 policy 判定函数 / who:身份只是开头,真正进规则的是属性 待审核 13 / 23
who · subject + 属性

who:身份只是开头,真正进规则的是属性

who 不只是一个用户名。它是一个 subject(principal),携带一组属性:roledeptclearance(密级)、employed(是否在职)……RBAC 只读取其中一个——roleABAC 让任意属性都能写进规则。

1 · subject 属性对决策的影响

动作固定为 update、资源固定为「营销文案 #42」(L1,owner=u-bob),此时决策的全部变数都落在 subject 的属性上。

图 1-1 · 同一个动作与资源下,subject 属性变化引起的决策翻转。可挑选 subject 载入默认属性,再逐个拨动 role / dept / clearance / employed。

注 · 把 subject 的 role 固定不动,只改 clearanceemployed,决策照样逆转。这正是 ABAC 超出 RBAC 之处:两个 role 完全相同的人,因为其他属性不同,得到不同结论。RBAC 里这是做不到的——它只读取 role。

建议 · 留意 r-owner 这条规则:它比较的是 resource.owner === subject.id,把「人」和「物」用一条关系连起来(这份资源是不是他本人的)。选中 Bob 时它会亮,因为文案归 Bob。这条线索在 what:资源也有属性 一页继续展开,并在 ReBAC 一页长成完整的模型。