以下规则表示角色为“acme_manager”的主题可以对资源“/ acme / widgets”执行任何操作:
<Rule Effect="Permit" RuleId="PermitRule">
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/acme/widgets</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
</Apply>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">acme_manager</AttributeValue>
<AttributeDesignator AttributeId="http://wso2.org/claims/role" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
</Apply>
</Apply>
</Condition>
</Rule>
是否有可能创建一个更具动态性的规则,其中包含: “具有X_manager角色的主体可以对资源/ Y /小部件执行任何操作,如果X等于Y”
所以我可以使用相同的策略来强制执行:
不创建多个类似的政策。
答案 0 :(得分:1)
是的,当然,这实际上是XACML相对于其他授权框架的主要优势之一,而且肯定超过了RBAC。
在XACML中,您可以使用2个元素来定义授权的适用性。这些是:
我建议您使用ALFA编写政策。它比普通的旧XACML容易得多。 ALFA是Axiomatics开发的免费工具(免责声明:我为Axiomatics工作)。它也正在OASIS XACML技术委员会中进行标准化。
答案 1 :(得分:0)
我认为有两种方法可以做到这一点:
在策略中定义两个&#34; VariableDefinition&#34; s:一个用于获取下划线字符前的部分,另一个用于获取最后两个斜杠字符之间的部分。 [我想知道XACML的核心规范是否定义了这样的功能] 那么你可以在&#34;规则&#34;下使用两个&#34; VariableDefinition&#34;然后使用标准字符串相等的函数来比较它们。
只需定义您自己的新功能,并将其添加到您的PDP使用的FunctionFactory中。 这两种方法是相同的,您需要在某些属性上应用指定的功能,而不是直接使用原始属性值。