У меня есть следующие активы:
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
}
Я хочу ограничить разрешение READ для 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 есть только одна группа и пользователь?