如何在ALFA中自动化XACML字符串操作功能?

时间:2016-07-06 13:47:45

标签: authorization xacml abac alfa

我们收到了在策略中编写一组规则的请求,该策略应该生成详细的日志消息,包括Permit和Deny条件。生成的日志输出是多个属性的构造,或者从XACML请求输入或PIP Java例程传递,在这些例程中,我们在一组属性中获得其他属性,如UTC日志事件时间和数据源的服务状态来自数据库。所有信息都应通过XACML义务传输到PEP,该义务将String转换为最终的数据库记录步骤。

有没有办法在ALFA语言中创建可重用的函数,以可调用的方式对所有必需的String操作语句进行分组,与Java编程函数类似,避免编写冗余代码段。

1 个答案:

答案 0 :(得分: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
         }
     }
}