action + 全部合起来 → 决策:规则冲突时,谁说了算
四个输入齐了——授权请求装配的那个四元组——交给 PDP(Policy Decision Point)。policy 是一组 rule,每条要么 permit 要么 deny,各自带一个条件
when(req)。多条同时命中十分常见,如何收敛成一个结论?依靠组合算法(combining algorithm)。
1 · 一次完整的判定
资源调至 L2 以上或设备切为个人时,放行会附带 obligation——这就是为什么决策的返回值往往不是一个 bool,而是 { decision, obligations }。
2 · 三种组合算法在同一请求上的分歧
组合算法不是细节,它本身就是一项策略决定。用上面那条当前请求同时运行三种算法——当 permit 和 deny 同时命中时,结果便会出现分歧。
注 · deny-overrides 最保守、最常用,安全场景默认它(有一条拒就拒)。first-applicable 使顺序等于优先级,如同防火墙规则链,可控但需谨慎处理规则排序。无论选哪种,都要配一个默认决策:本系列默认 deny(closed
world,没人放行就拒)——这几乎总是对的,忘了写规则应该拒,而不是放。
建议 · obligation(附带义务)意味着 permit 不总是「干净地放行」。命中放行后,引擎还能附带要求——写审计日志、脱敏或水印展示。把它建模进返回值,比在业务代码里散落一堆「如果是机密就打水印」要可控得多。