1

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

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

4

1 回答 1

0

不,在当前版本的 ALFA 中没有办法定义自定义函数来对您感兴趣的所有内容进行分组。

但是,您可以很好地定义一个包含所有逻辑的建议/义务的规则,然后在您需要的所有地方引用该规则。在 ALFA 中,您可以引用规则元素(这在 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
         }
     }
}
于 2017-03-05T18:46:25.023 回答