2017-03-21 2 views
1

Nehmen wir an, wir haben eine Tüte Booleans. Gibt es eine Funktion, die feststellen kann, ob die Anzahl der "wahren" Werte größer als eine Konstante (z. B. 5) ist?XACML Taschen Operationen

Ich stieß auf "n-of" -Funktion, aber es erfordert mehrere separate Attribute als Eingabe und keine Tasche ... Vielleicht kann "Karte" -Funktion helfen, aber nicht sicher, wie seit ich keine Funktion gefunden habe das kann die Anzahl der Gegenstände in einer Tasche reduzieren.

Danke! Michael.

Antwort

0

Um das zu erreichen, was Sie suchen, müssen Sie zwei Funktionen nutzen:

  • eine Funktion, die die Größe der Tasche misst z.B. booleanBagSize(someAttribute)
  • eine Funktion, die überprüft, dass jeder Wert des Beutels gleich wahr ist. z.B. booleanEquals verwendet in Verbindung mit einer Funktion höherer Ordnung, z.B. AllOf

Der resultierende Code in ALFA wäre:

namespace axiomatics{ 
    attribute allowed{ 
     category = subjectCat 
     id = "axiomatics.allowed" 
     type = boolean 
    } 
    policy allowIf5True{ 
     apply firstApplicable 
     rule allow{ 
      permit 
      condition booleanBagSize(allowed)>5 && allOf(function[booleanEqual], true, allowed) 
     } 
    } 
} 

Und der XACML 3.0 Ausgang

<?xml version="1.0" encoding="UTF-8"?> 
<!--This file was generated by the ALFA Plugin for Eclipse from Axiomatics AB (http://www.axiomatics.com). 
Any modification to this file will be lost upon recompilation of the source ALFA file--> 
<xacml3:Policy xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" 
    PolicyId="http://axiomatics.com/alfa/identifier/axiomatics.allowIf5True" 
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" 
    Version="1.0"> 
    <xacml3:Description /> 
    <xacml3:PolicyDefaults> 
     <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml3:XPathVersion> 
    </xacml3:PolicyDefaults> 
    <xacml3:Target /> 
    <xacml3:Rule 
      Effect="Permit" 
      RuleId="http://axiomatics.com/alfa/identifier/axiomatics.allowIf5True.allow"> 
     <xacml3:Description /> 
     <xacml3:Target /> 
     <xacml3:Condition> 
      <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and"> 
       <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-greater-than"> 
        <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:boolean-bag-size" > 
         <xacml3:AttributeDesignator 
          AttributeId="axiomatics.allowed" 
          DataType="http://www.w3.org/2001/XMLSchema#boolean" 
          Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
          MustBePresent="false" 
         /> 
        </xacml3:Apply> 
        <xacml3:AttributeValue 
         DataType="http://www.w3.org/2001/XMLSchema#integer">5</xacml3:AttributeValue> 
       </xacml3:Apply> 
       <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:all-of" > 
        <xacml3:Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:boolean-equal"/> 
        <xacml3:AttributeValue 
         DataType="http://www.w3.org/2001/XMLSchema#boolean">true</xacml3:AttributeValue> 
        <xacml3:AttributeDesignator 
         AttributeId="axiomatics.allowed" 
         DataType="http://www.w3.org/2001/XMLSchema#boolean" 
         Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
         MustBePresent="false" 
        /> 
       </xacml3:Apply> 
      </xacml3:Apply> 
     </xacml3:Condition> 
    </xacml3:Rule> 
</xacml3:Policy> 

Dieser Ansatz nur nur dann, wenn der Beutel wahre Werte enthält Werke wäre.

+0

Danke für die Antwort David! Mein Hauptanwendungsfall ist, wenn der Beutel nicht nur wahre Werte, sondern auch falsche Werte enthält. Gibt es eine Möglichkeit, die Anzahl der "wahren" Werte zu bestimmen/zählen/zu prüfen, wenn mehrere tru und falsche Werte in der Tasche sind? – Michael

+0

Lassen Sie mich darüber nachdenken. In Axiomatics Policy Server können Sie immer eine benutzerdefinierte Funktion programmieren, die dies für Sie erledigt. Im Allgemeinen ist es bei XACML jedoch nicht wichtig, wie viele Werte gezählt werden. Sie kümmern sich um ihre Anwesenheit. –

+0

Ich möchte nur die Standard-XACML-Funktion verwenden ... Bitte lassen Sie mich wissen, wenn Sie eine Idee haben, wie Sie das lösen können. Vielen Dank! – Michael