我有以下资产:
asset Group identified by Id {
o String id
}
asset Foo identified by Id {
o String id
--> Group[] groups
}
以及以下参与者:
participant User identified by id {
o String id
--> Group[] groups
}
我只想将Foo的读取权限限制为仅属于同一组的用户。我有以下ACL规则:
participant(p): "org.example.network.User"
operation: READ
resource(r): "org.example.network.Foo"
condition: (p.groups.some(function (pg) {
return r.groups.some(function (rg) {
return rg.getIdentifier() === pg.getIdentifier();
});
})
)
该规则有效,但是速度太慢。在摩卡咖啡的测试运行中,读取操作需要8秒钟。太长了,因为Foo和User只有一个组。但是,如果像下面的示例中那样进行一级迭代,则读取操作仅花费0.5秒:
participant(p): "org.example.network.User"
operation: READ
resource(r): "org.example.network.Foo"
condition: (p.groups.some(function (pg) {
return pg.id === 'some id';
})
)
这种差异的原因是什么?为什么即使Foo和用户只有一个组,多次迭代也要花这么长时间?