2016-07-06 21 views
1

Мы получили запрос на создание набора правил в политике, которая должна генерировать подробное сообщение журнала, как для условий Permit, так и для Deny. Результирующий вывод журнала - это построение нескольких атрибутов или перенос из ввода запроса XACML или из подпрограмм PIP Java, где мы получаем дополнительные атрибуты, такие как время журнала журнала UTC и статус службы источников данных, среди набора атрибутов из базы данных. Вся информация должна быть отправлена ​​в PEP с помощью обязательств XACML, которая преобразует String в конечный этап ведения базы данных.Как автоматизировать функцию манипуляции строками XACML в ALFA?

Есть ли способ создать многоразовую функцию в языке ALFA, которая группирует все необходимые операторы манипуляции строками вызываемым образом, аналогично программным функциям Java, избегая записи избыточных разделов кода. не

ответ

0

Нет есть не путь в текущей версии ALFA определить пользовательскую функцию, которая будет группа, все, что вы заинтересованы в.

Однако, вы вполне могли бы определить правило, которое содержит советы/обязательство со всей логикой, а затем ссылаться на правило во всех местах, в которых вы нуждаетесь. В ALFA, вы можете ссылаться на элементы Rule (то, что не возможно в XML/XACML)

Вот пример:

namespace so{ 
    import Attributes.* 
    attribute messageContent{ 
     category = environmentCat 
     id = "messageContent" 
     type = string 
    } 
    obligation message = "message" 
    /** 
    * Reusable rule with obligation pattern 
    */ 
    rule giveReason{ 
     deny 
     on deny { 
      obligation message{ 
       subjectId = subjectId 
       currentDateTime = currentDateTime 
       messageContent = "Hi, "+stringOneAndOnly(subjectId)+ 
           ". You cannot do action "+ 
           stringOneAndOnly(Attributes.actionId)+ 
           " on "+stringOneAndOnly(resourceId)+ 
           " at "+stringFromDateTime(dateTimeOneAndOnly(currentDateTime))+"." 
      } 
     } 
    } 

    /** 
    * Your policies 
    */ 
    policyset somePS{ 
     apply firstApplicable 
     policy example1{ 
      apply firstApplicable 
      /** 
       * Other rules go here 
       */ 
      giveReason // link to common rule 
     } 
     policy example2{ 
      apply firstApplicable 
      /** 
       * Other rules go here 
       */ 
      giveReason // link to common rule 
     } 
    } 
}