我们收到了在策略中编写一组规则的请求,该策略应该生成详细的日志消息,包括Permit和Deny条件。生成的日志输出是多个属性的构造,或者从XACML请求输入或PIP Java例程传递,在这些例程中,我们在一组属性中获得其他属性,如UTC日志事件时间和数据源的服务状态来自数据库。所有信息都应通过XACML义务传输到PEP,该义务将String转换为最终的数据库记录步骤。
有没有办法在ALFA语言中创建可重用的函数,以可调用的方式对所有必需的String操作语句进行分组,与Java编程函数类似,避免编写冗余代码段。
答案 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
}
}
}