这是按规格。XACML 规范只允许在 Permit 或 Deny 中返回义务和建议。在制定策略时,您必须牢记这一点。见下文和这里。
7.18 义务和建议
规则、策略或策略集可能包含一个或多个义务或建议表达式。当评估此类规则、策略或策略集时,应将义务或建议表达式分别评估为应将其传递到下一个评估级别(封闭或引用策略、策略集或授权决策)仅当正在评估的规则、策略或策略集的结果与义务的 FulfillOn 属性或通知的 ApplysTo 属性的值匹配时。如果具有匹配的 FulfillOn 或 AppliesTo 属性的义务或建议表达式中的任何属性分配表达式计算为“不确定”,则整个规则、策略或策略集应为“不确定”。如果 FulfillOn 或 AppliesTo 属性与组合算法或规则评估的结果不匹配,则义务或建议表达式中的任何不确定性都无效。作为此程序的结果,如果未对从中得出的规则、政策或政策集进行评估,或者如果其评估结果为“不确定”或“不适用”,则不会向 PEP 返回任何义务或建议,或如果评估规则、策略或策略集所产生的决定与评估封闭策略集所产生的决定不匹配。如果将 PDP 的评估视为规则、策略集和策略树,每个都返回“Permit”或“Deny”,那么 PDP 返回给 PEP 的一组义务和建议将仅包括与那些路径相关的义务和建议,其中每个评估级别的结果与 PDP 返回的结果相同。在任何缺乏确定性是不可接受的情况下,应使用确定性组合算法,例如有序拒绝覆盖。另见第 7.2 节。
允许关于 NotApplicable 的义务和建议会很混乱。想象一下以下策略结构:
- PolicySet主策略
- 政策允许经理查看文件+ NotApplicable 上的义务 A
- 政策允许员工查看自己部门的文件+ NotApplicable 上的义务 B
- 政策允许发布者查看和发布文件+ 许可义务 C
想象一下进来的请求是:
- 请求:出版商 Alice 可以发布 doc #123 吗?
在您的世界中,响应将(可能)是:许可 + 义务 A、B、C
这真的没有任何意义。