2015 年 3 月 10 日的 ALFA (alfa-for-xacml-v1.0-wd01) 的 OASIS 工作草案 01 谈到了常数值
3.15 常数值
常量值可以出现在策略表达式中。ALFA 直接支持字符串、整数、双精度和布尔类型的常量。字符串用单引号或双引号引起来。整数由一个数字和一个可选的减号组成。Double 由一个带小数点的数字和可选的减号组成。布尔值由值 true 和 false 组成,不带引号。其他数据类型使用后跟冒号和数据类型名称的字符串表示。
这意味着,您可以使用该示例中的常量值(虽然report
是常量值):
target clause requestedType == "report"
但问题是,一旦 ALFA 文件增长并且您已将常量值report
全部写入,您可能希望将常量值更改为my.company.attributes.medicalReport
. 为此,您必须查找并替换所有出现的常量值。
因此(为了避免冗余)constants
已经在其他语言中发明了,您可以在其中定义 smth. 像
const string REPORT_TYPE = "my.company.attributes.medicalReport"
甚至更高效:
const integer REPORT_TYPE_ID = 3
甚至更优雅:
const enum SUBJECT_TYPES { PATIENT, USER, EXAM, REPORT }
定义了这些常量后,我可以编写我的目标,例如:
target clause requestedType == REPORT_TYPE_ID
ALFA 是否支持常量或者有办法“模拟”它们(可能是返回所需值的函数)?