XACML - 如何表达“不是男性”而不是“不是性别==男性”

时间:2014-05-15 06:10:04

标签: xacml alfa

XACML中没有的函数要求一个布尔参数。但是,我想表达一个像" not string"例如"不是男性"。我不能使用"不是性别==男性"相反。我搜索了谷歌和stackoverflow,但我没能解决这个问题。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

发送XACML请求时,始终会发送一组包含一个或多个值的属性。您可以发送:

  • 具有标识符性别,数据类型字符串和类别主题的属性,或
  • 具有标识符male,datatype boolean和category subject的属性。

无论哪种方式,您仍然会发送一个属性。在一种情况下,该值是字符串。在另一个中,值是一个字符串。在下面的解释中,我采用字符串方法。如果你想要布尔方法,只需用男性替换性别==“男性”。

请注意,在XACML中,属性可能没有值。这使得XACML布尔值不仅仅是布尔值。男性可能是真实的,虚假的或未定义的。在编写策略/规则时请记住这一点。

表达负面情况,例如不(性别= =男性),您有两种选择:

  • 可能值的集合是有限的,例如真/假,男/女,热/暖/冷,你很乐意为每个案例制定政策或规则。
  • 或可能值的集合太长或无限,例如数字值或公民身份清单(其中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
    }
}