XACML範例

<?xml version="1.0" encoding="UTF-8"?> <rule ruleId="//medico.com/rules/rule2" effect="Permit" xmlns="http://www.oasis-open.org/committees/xacml/docs
/draft-xacml-schema-policy-12.xsd"
xmlns:saml="http://www.oasis-open.org/committees/security
/docs/draft-sstc-schema-assertion-28.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.oasis-open.org/committees
/xacml/docs/draft-xacml-schema-policy-12.xsd
D:\MYDOCU~1\Standards\XACML\V12SCH~1\XACMLV~3.XSD">
<target>
<subjects>
<saml:Attribute AttributeName="RFC822Name"
AttributeNamespace="//medico.com">
<saml:AttributeValue>*</saml:AttributeValue>
</saml:Attribute>
<resources>
<saml:AttributeValue>//medico.com/record.*</saml:
AttributeValue>
<saml:Attribute AttributeName="RFC822Name"
AttributeNamespace="//medico.com">
<saml:AttributeValue>*</saml:AttributeValue>
</saml:Attribute>
<resources>
<actions>
<saml:Action>read</saml:Action>
</actions>
</target>
<condition>
<and>
<equal>
<saml:AttributeDesignator AttributeName="requestor"
AttributeNamespace="//oasis-open.org/committees/
xacml/docs/identifiers/"/>
<saml:AttributeDesignator
AttributeName="parentGuardianName"
AttributeNamespace="//medico.com/record/parentGuardian/"/>
</equal>
<not>
<greaterOrEqual>
<minus>
<saml:AttributeDesignator AttributeName="today'sDate"
AttributeNamespace="//medico.com/"/>
<saml:AttributeDesignator AttributeName="patientDoB"
AttributeNamespace="//medico.com/record/patient/"/>
</minus>
<saml:Attribute AttributeName="ageOfConsent"
AttributeNamespace="//medico.com">
<saml:AttributeValue>16-0-0</saml:AttributeValue>
</saml:Attribute>
</greaterOrEqual>
</not>
</and>
</condition>
</rule>

這是一個XACML的範例程式文件,排版排了好久,其內容為:當病患的年齡未滿16歲之前,其所有病例可以被其父母親或監護人閱讀。

以下分為四個部份(第2~第5個區塊)說明其內容:

1、由於此範例只利用到"rule"element type,故給予一個"rule_id",本例為「ruleId=" //medico.com/rules/rule2"」。當授權要求符合條件時,則允許("Permit")執行該項要求的動作。

2、這個部份主要以XML名稱空間(namespace)的方式,指定所需相關綱要檔的參照路徑(Xpath):  

  • xmlns-XACML綱要檔的參照路徑
  • xmlns:saml-SAML綱要檔的參照路徑
  • xmlns:xsi-XACML範例之綱要檔的參照路徑

3、這個部份是針對"rule"的"target"部份:所有人("*")對於路徑"//medico/record"下的全部元素("//medico/record.*")都有讀取("read")的權力。

4、這個部份是針對"rule"的"condition"部份,成立的條件為:要求者的姓名要"等於"其父母親或監護人("parentGuardian")的姓名;並且病患的生日("patientDoB")與系統日期("today’sDate"),相減後要大於或等於16。

文字參考自:俞正宏碩士論文