不在 XACML 中的函数要求一个布尔参数。但是,我想表达“非男性”等“非字符串”之类的政策。我不能用“非性别 == 男性”来代替它。我搜索了谷歌和stackoverflow,但我未能解决这个问题。我怎么能那样做?
问问题
61 次
1 回答
1
当您发送 XACML 请求时,您总是发送一组具有一个或多个值的属性。您可以发送:
- 具有标识符性别、数据类型字符串和类别主题的属性,或
- 具有标识符 male、数据类型 boolean 和类别主题的属性。
无论哪种方式,您仍然发送一个属性。在一种情况下,该值是一个字符串。在另一个值是一个字符串。在下面的解释中,我采用了字符串方法。如果您想要布尔方法,只需将性别==“男性”替换为男性。
请注意,在 XACML 中,属性可能没有值。这使得 XACML 布尔值不仅仅是布尔值。男性可以是真、假或未定义。在编写策略/规则时请记住这一点。
要表达否定条件,例如 not(gender==male),您有两种选择:
- 可能值的集合是有限的,例如真/假、男/女、热/暖/冷,您很乐意为每个案例建立一个策略或规则。
- 或者可能的值集太长或无限,例如数值或公民身份列表(其中 180 多个)。
在前一种情况下,您可以编写以下内容(ALFA中的伪代码):
policy checkGender{
apply firstApplicable
rule male{
target clause gender=="male"
permit
}
rule female{
target clause gender=="female"
permit
}
/**
* Optionally add a catch all case
*/
rule other{
target clause ... // Here you'd have to define other checks you are interested in
}
}
在后一种情况下,您需要编写否定条件。为此,您需要使用 XACML 条件。由于 XACML 条件只存在于规则中,因此您需要深入到 XACML 规则级别。
policy checkGender{
apply firstApplicable
rule notMale{
condition not(gender=="male")
permit
}
}
于 2014-05-15T09:30:11.717 回答