在 ALFA 中使用数学
Use of math in ALFA
如何使这样的规则生效:
rule adminCanViewAllExams {
condition (integerOneAndOnly(my.company.attributes.subject.rights) & 0x00000040) == 0
permit
}
语法荧光笔抱怨它不知道那些项目:
- &(这是一个二进制数学运算)
- 0x00000040(这是一个整数的十六进制表示)
编辑
(在问题中添加OP的评论)
我想尽可能多地保留在我当前的应用程序中。意思是,我不想在我的数据库模型中做太多改变。我只想实施新的 PEP 和 PDP 部分。所以,目前用户的权限存储在一个Long中。数字中的每一位代表一个权利。为了获得正确的结果,我们进行了二进制 &- 操作,它屏蔽了 Long 中的其他位。我们可能会重新设计这部分,但了解对数学运算的支持程度仍然很好
XACML 不支持按位逻辑。它可以执行布尔逻辑(AND 和 OR),仅此而已。
要实现您的目标,您可以使用包含 my.company.attributes.subject.rights
和 0x00000040
的政策信息点。它将 return 一个名为 allowed
.
的属性
或者,您可以扩展 XACML(和 ALFA)以添加缺少的数据类型和函数。但我建议采用人类可读的政策。
如何使这样的规则生效:
rule adminCanViewAllExams {
condition (integerOneAndOnly(my.company.attributes.subject.rights) & 0x00000040) == 0
permit
}
语法荧光笔抱怨它不知道那些项目:
- &(这是一个二进制数学运算)
- 0x00000040(这是一个整数的十六进制表示)
编辑
(在问题中添加OP的评论)
我想尽可能多地保留在我当前的应用程序中。意思是,我不想在我的数据库模型中做太多改变。我只想实施新的 PEP 和 PDP 部分。所以,目前用户的权限存储在一个Long中。数字中的每一位代表一个权利。为了获得正确的结果,我们进行了二进制 &- 操作,它屏蔽了 Long 中的其他位。我们可能会重新设计这部分,但了解对数学运算的支持程度仍然很好
XACML 不支持按位逻辑。它可以执行布尔逻辑(AND 和 OR),仅此而已。
要实现您的目标,您可以使用包含 my.company.attributes.subject.rights
和 0x00000040
的政策信息点。它将 return 一个名为 allowed
.
或者,您可以扩展 XACML(和 ALFA)以添加缺少的数据类型和函数。但我建议采用人类可读的政策。