2014-05-15 20 views
0

XACML中的函數沒有要求布爾參數。但是,我想表達像「不是男性」這樣的「不串」的政策。我不能使用「不是性別==男性」來代替。我搜索谷歌和stackoverflow,但我沒有解決這個問題。我怎麼能這樣做?XACML - 如何表達「不是男性」而不是「不是性別==男性」

+1

[使用XACML表達策略是一個邏輯表達式](可能重複http://stackoverflow.com/questions/23646066/using-xacml-to-express-policy-which-is-a-邏輯表達式) –

回答

1

當您發送XACML請求時,您總是發送一組具有一個或多個值的屬性。你要麼派:

  • 與標識符性別,數據類型的字符串,以及類主題或
  • 與標識符男,布爾數據類型和類別主題的屬性的屬性。

無論哪種方式,你仍然發送屬性。在一種情況下,該值是一個字符串。另一個值是一個字符串。在下面的解釋中,我採用了字符串方法。如果你想要布爾方法,只需將性別==「男性」替換爲男性。

請注意,在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 
    } 
} 
相關問題