2016-10-27 19 views
1

Есть ли способ генерации строки Advice или Obligation, возвращаемой в ответе XACML, динамически зависящей от атрибутов, используемых в оценке (например, окружение)?Генерирование строки рекомендаций XACML динамически в политике или правиле

Например, через расширение, которое реализует логику.

+0

Можете ли вы быть более конкретным? –

+0

Идея состоит в том, чтобы генерировать конкретный совет, зависящий от пользователя, без необходимости определять правила для всех. Не уверен, что это ясно. – Hos

ответ

2

В XACML 3.0, Obligation и Advice элементы могут содержать назначения атрибутов. Назначения атрибутов - это заполнители, которые могут быть заполнены статическим значением или динамическим значением, например. значение, полученное из другого атрибута XACML. Например, мы могли бы иметь следующее (с использованием обозначений - The Axiomatics Language for Authorization):

obligation notifyManager = "com.axiomatics.examples.notification.notifyManager" 
policy accessDocs{ 
    apply firstApplicable 
    rule denyOutOfOffice{ 
     target clause currentTime>"17:00:00":time or currentTime<"09:00:00":time 
     deny 
     on deny{ 
      obligation notifyManager{ 
       com.axiomatics.examples.message = "You cannot access anything outside office hours" 
       com.axiomatics.examples.user.managerEmail = com.axiomatics.examples.user.managerEmail 
      } 
     } 
    }   
} 

В этом примере, обязательство имеет 2 заполнителей:

  • com.axiomatics.examples.message: этот заполнитель содержит статическое значение.
  • com.axiomatics.examples.user.managerEmail: этот заполнитель содержит динамическое значение.

Вы можете использовать функции в заполнителях, например. конкатенация строк.

источник

XACML выглядит следующим образом:

<?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/example.accessDocs" 
    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="Deny" 
      RuleId="http://axiomatics.com/alfa/identifier/example.accessDocs.denyOutOfOffice"> 
     <xacml3:Description /> 
     <xacml3:Target> 
      <xacml3:AnyOf> 
       <xacml3:AllOf> 
        <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:time-less-than"> 
         <xacml3:AttributeValue 
          DataType="http://www.w3.org/2001/XMLSchema#time">17:00:00</xacml3:AttributeValue> 
         <xacml3:AttributeDesignator 
          AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-time" 
          DataType="http://www.w3.org/2001/XMLSchema#time" 
          Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" 
          MustBePresent="false" 
         /> 
        </xacml3:Match> 
       </xacml3:AllOf> 
       <xacml3:AllOf> 
        <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:time-greater-than"> 
         <xacml3:AttributeValue 
          DataType="http://www.w3.org/2001/XMLSchema#time">09:00:00</xacml3:AttributeValue> 
         <xacml3:AttributeDesignator 
          AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-time" 
          DataType="http://www.w3.org/2001/XMLSchema#time" 
          Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" 
          MustBePresent="false" 
         /> 
        </xacml3:Match> 
       </xacml3:AllOf> 
      </xacml3:AnyOf> 
     </xacml3:Target> 
     <xacml3:ObligationExpressions> 
      <xacml3:ObligationExpression ObligationId="com.axiomatics.examples.notification.notifyManager" 
      FulfillOn="Deny"> 
       <xacml3:AttributeAssignmentExpression AttributeId="com.axiomatics.examples.message" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment"> 
        <xacml3:AttributeValue 
         DataType="http://www.w3.org/2001/XMLSchema#string">You cannot access anything outside office hours</xacml3:AttributeValue> 
       </xacml3:AttributeAssignmentExpression> 
       <xacml3:AttributeAssignmentExpression AttributeId="com.axiomatics.examples.user.manager.email" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> 
        <xacml3:AttributeDesignator 
         AttributeId="com.axiomatics.examples.user.manager.email" 
         DataType="http://www.w3.org/2001/XMLSchema#string" 
         Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
         MustBePresent="false" 
        /> 
       </xacml3:AttributeAssignmentExpression> 
      </xacml3:ObligationExpression> 
     </xacml3:ObligationExpressions> 
    </xacml3:Rule> 
</xacml3:Policy>