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.
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
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. –
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