2016-04-18 1 views
1

私はJavaアプリケーションでBalanaとXACML 3.0を使用しています。 次のようMY XMLスキーマが定義されている次のようXACMLを使用してOraligation Expressionで複数の属性値を返すにはどうすればよいですか?

<record> 
    <proposal> 
      <proposalid></proposalid> 
      <proposaltitle></proposaltitle> 
      <pi> 
       <fullname></fullname> 
       <workemail></workemail> 
       <userid></userid> 
      </pi> 
      <copis> 
       <copi> 
        <fullname></fullname> 
        <workemail></workemail> 
        <userid></userid> 
       </copi> 
       <copi> 
        <fullname></fullname> 
        <workemail></workemail> 
        <userid></userid> 
       </copi> 
       <copi> 
        <firstname></firstname> 
        <lastname></lastname> 
        <workemail></workemail> 
        <userid></userid> 
       </copi> 
      </copis>     
     </proposal> 
    </record> 

私のアプリケーションは、PEPにXACML要求を送信します。

<ObligationExpressions> 
     <ObligationExpression ObligationId="sendEmail" FulfillOn="Permit"> 
     <AttributeAssignmentExpression AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text"> 
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Your proposal has been updated. As soon as possible please review your proposal for any unwanted changes</AttributeValue> 
     </AttributeAssignmentExpression> 
     <AttributeAssignmentExpression AttributeId="piEmail"> 
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only"> 
      <AttributeSelector MustBePresent="false" 
       ContextSelectorId="urn:oasis:names:tc:xacml:3.0:content-selector" 
       Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" 
       Path="//ak:pi/ak:workemail/text()" DataType="http://www.w3.org/2001/XMLSchema#string" /> 
      </Apply> 
     </AttributeAssignmentExpression>   
     <AttributeAssignmentExpression AttributeId="piFullName"> 
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only"> 
      <AttributeSelector MustBePresent="false" 
       ContextSelectorId="urn:oasis:names:tc:xacml:3.0:content-selector" 
       Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" 
       Path="//ak:pi/ak:fullname/text()" DataType="http://www.w3.org/2001/XMLSchema#string" /> 
      </Apply> 
     </AttributeAssignmentExpression> 
     <AttributeAssignmentExpression AttributeId="coPisEmail"> 
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only"> 
      <AttributeSelector MustBePresent="false" 
       ContextSelectorId="urn:oasis:names:tc:xacml:3.0:content-selector" 
       Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" 
       Path="//ak:copis/ak:copi/ak:workemail/text()" DataType="http://www.w3.org/2001/XMLSchema#string" /> 
      </Apply> 
     </AttributeAssignmentExpression>   
     <AttributeAssignmentExpression AttributeId="coPisFullName"> 
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only"> 
      <AttributeSelector MustBePresent="false" 
       ContextSelectorId="urn:oasis:names:tc:xacml:3.0:content-selector" 
       Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" 
       Path="//ak:copis/ak:copi/ak:fullname/text()" DataType="http://www.w3.org/2001/XMLSchema#string" /> 
      </Apply> 
     </AttributeAssignmentExpression> 
     </ObligationExpression> 
    </ObligationExpressions> 

私:私は私のポリシールールで

<Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> 
    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:proposal.role" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">PI</AttributeValue> 
    </Attribute> 
    </Attributes> 
    <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"> 
    <Content> 
     <ak:record xmlns:ak="http://akpower.org"> 
     <ak:proposal> 
      <ak:proposalid>5702a60865dbb30b09a492cf</ak:proposalid> 
      <ak:proposaltitle>Proposal 11</ak:proposaltitle> 
      <ak:authorprofile> 
      <ak:fullname>Milson Munakami</ak:fullname> 
      </ak:authorprofile> 
      <ak:pi> 
      <ak:fullname>Milson Munakami</ak:fullname> 
      <ak:workemail>[email protected]</ak:workemail> 
      <ak:userid>56fee3e965dbb35ce5c900fa</ak:userid> 
      </ak:pi> 
      <ak:copis> 
      <ak:copi> 
       <ak:fullname>PS Wang</ak:fullname> 
       <ak:workemail>[email protected]</ak:workemail> 
       <ak:userid>56fee3e965dbb35ce5c900fx</ak:userid> 
      </ak:copi> 
      <ak:copi> 
       <ak:fullname>Thomas Voltz</ak:fullname> 
       <ak:workemail>[email protected]</ak:workemail> 
       <ak:userid>56fee3e965dbb35ce5c900fx</ak:userid> 
      </ak:copi> 
      </ak:copis> 
     </ak:proposal> 
     </ak:record> 
    </Content> 
    <Attribute AttributeId="urn:oasis:names:tc:xacml:3.0:content-selector" IncludeInResult="false"> 
     <AttributeValue XPathCategory="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="urn:oasis:names:tc:xacml:3.0:data-type:xpathExpression">//ak:record/ak:proposal</AttributeValue> 
    </Attribute> 
    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:DeletedByPI" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NOTDELETED</AttributeValue> 
    </Attribute> 
    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:proposal.section" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Whole Proposal</AttributeValue> 
    </Attribute> 
    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:SubmittedByPI" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NOTSUBMITTED</AttributeValue> 
    </Attribute> 
    </Attributes> 
    <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"> 
    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:proposal.action" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Save</AttributeValue> 
    </Attribute> 
    </Attributes> 
</Request> 

を応答は次のとおりです。

<Response xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"> 
    <Result> 
    <Decision>Permit</Decision> 
    <Status> 
     <StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok"/> 
    </Status> 
    <Obligations> 
     <Obligation ObligationId="sendEmail"> 
     <AttributeAssignment AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text" DataType="http://www.w3.org/2001/XMLSchema#string"> 
      Your proposal has been updated. As soon as possible please review your proposal for any unwanted changes 
     </AttributeAssignment> 
     <AttributeAssignment AttributeId="piEmail" DataType="http://www.w3.org/2001/XMLSchema#string"> 
      [email protected] 
     </AttributeAssignment> 
     <AttributeAssignment AttributeId="piFullName" DataType="http://www.w3.org/2001/XMLSchema#string"> 
      Milson Munakami 
     </AttributeAssignment> 
     </Obligation> 
    </Obligations> 
    </Result> 
</Response> 

これには、coPisEmailおよびcoPisFullNameの義務値は含まれていません。また、私はどのようにこれらの動的属性の値を取得することができますか分からないのですか?私のアプリケーションでこれらの値を使用するにはどうすればいいですか?たとえば、すべての電子メールと完全な名前を持つ1つの値だけを返すか、別の応答で個別の値を返すのでしょうか?私はここに何か不足していると思います。

+0

は、私はそれが次AttributeExpressionを使用して固定しましたPath = "// ak:pi/ak:workemail/text()" DataType = "http://www.w3.org/2001/XMLSchema#string" /> Milson

答えて

1

複数の値を返すためにXACMLで行う必要は特にありません。すべての属性はデフォルトでバッグになります。 PDPが与えられた式(属性指定子または属性セレクタ)に対して複数の値を見つけた場合、それらの値はすべて返されます。

補足として、XPathをXACMLポリシー内で使用することを避けることをお勧めします。なぜなら、理解しづらくなるためです。 XML処理は、PEP内またはPIP内で実行する必要があり、XACMLポリシーはできるだけビジネスに焦点を当てたままでなければなりません。

関連する問題