Effector
'Effect'代表政策规则的结果,而'Effector'是用于处理Casbin中效果的接口。
MergeEffects()
'MergeEffects()'函数用于将执行器收集的所有匹配结果合并为一个决定。
例如:
- Go
Effect, explainIndex, err = e.MergeEffects(expr, effects, matches, policyIndex, policyLength)
在这个例子中:
- 'Effect'是由这个函数合并的最终决定(初始化为'Indeterminate')。
- 'explainIndex'是'eft'('Allow'或'Deny')的索引,它被初始化为'-1'。
- 'err'用于检查是否支持效果。
- 'expr'是政策效果的字符串表示。
effects是一个效果数组,可以是Allow、Indeterminate或Deny。matches是一个数组,用于指示结果是否与策略匹配。policyIndex是策略在模型中的索引。policyLength是策略的长度。
上面的代码说明了如何将参数传递给MergeEffects()函数,该函数将根据expr处理效果和匹配。
要使用Effector,请按照以下步骤操作:
- Go
var e Effector
Effect, explainIndex, err = e.MergeEffects(expr, effects, matches, policyIndex, policyLength)
MergeEffects()的基本思想是,如果expr可以匹配结果,表明p_eft是allow,那么所有效果都可以合并。 如果没有匹配到拒绝规则,那么决定是允许。
备注
如果expr不匹配条件"priority(p_eft) || deny",并且policyIndex小于policyLength-1,它将短路中间的一些效果。