Я работаю над системой управления доступом, и теперь у меня есть задача обнаружить дельту разрешений, полученных и потерянных для каждой модификации текущей авторизации.
Итак, я думал создать параллельный граф с разными ЭТИКЕТКАМИ, которые представляют предыдущее состояние.
Я пытаюсь выполнить свой запрос, чтобы получить все разрешения и целевую совокупность для обоих графиков, а затем вычислить дельту.
Это запрос, который я использую, чтобы получить разрешения и для каждого разрешения его целевую группу (людей, для которых пользователь может использовать разрешение):
match (u:UserPrevious {Id: '1', GraphTenantId: '685bff85-2759-204a-afa7-f6ba516c4f9f'})
with u
match (u)-[:IS_ACCESS_USER|BELONG_TO|IS_ACCESS_GROUP*1..2]->(ra:RoleAssignmentPrevious),
(ra)-[:HAS_ROLE]->(rl:RolePrevious)-[:CONTAINS_PERM]->(permission:PermissionPrevious) with distinct u, ra, permission
match (ra)-[:IS_TARGET]->(tg:TargetGroupPrevious)
with distinct tg, permission
match (target:UserPrevious)<-[*1..2]-(tg)
Where (target)<-[:HAS_HIERARCHICAL_ACCESS|HAS_HIERARCHICAL*1..2]-(tg)
With distinct permission.ShortName as p1, collect(distinct target.ReferenceId) as targets1
Return distinct p1, targets1
Как я могу выполнить тот же запрос для другого userId и затем вычислить дельту? Это означает, во-первых, какое разрешение пользователь потерял или получил, а затем для каждого разрешения - цели, которые пользователь потерял и получил.
Я чувствую, что это не будет иметь хорошие показатели.
Есть ли что-то, что может мне помочь или, может быть, я должен решить эту проблему из базы данных Neo4j?