Neo4j направил путь через несколько отношений с фильтром свойств
Будучи новичком в Cypher и Neo4j, у меня возникли проблемы при создании запроса для моего варианта использования. Я строю простой ACL (список контроля доступа) и ищу путь через отношения разрешений и иерархию. Картина может лучше объяснить это:
Key:
Users -> Blue
Groups -> Yellow, Green
Resource Tree -> Red
Теперь я хочу посмотреть, существует ли путь от Боба кeVar 33 ресурс, где Боб имеетОбновить доступ. Поскольку существует прямой путь, я могу получить то, что ищу, запустив
MATCH p =(usr:Usr)-[:AXO {update: true}]->(aco:ACO)
WHERE usr.name = 'Bob' AND aco.name = 'eVar 33'
RETURN p
Но теперь Боб также является членомMedia Mgmt группа, которая дает емучитать доступ кпреобразование ресурс. И потому чтопреобразование дальше вверх по дереву ресурсов, чемeVar 33, eVar 33 должен наследовать это разрешение. Но когда я запускаю тот же запрос в поисках{read: true}
вместо этого путь не найден. Я знаю, что это потому, что я не разрешаю прохождение через:IN
а также:HAS
отношения, но как я могу это сделать?
Я пытался:
MATCH p =(usr:Usr)-[:IN|:HAS|:AXO {read: true}]->(aco:ACO)
WHERE usr.name = 'Bob' AND aco.name = 'eVar 33'
RETURN p
думая, что это позволит обойти эти отношения, но он все равно не найдет пути (потому что я не допускаю глубину больше 1?).
Итак, вот мои потребности:
Неизвестная глубина путиЛюбой путь (пути), который я получаю, в порядке (все, что меня действительно волнует, это "есть ли путь или нет?")Должен быть в состоянии получить доступ от пользователя к ресурсу И когда соблюдается отношение AXO, оно должно соответствовать фильтру свойств.Должен следовать ориентированному графу (например, у Боба нет прав нааналитика)И нет, я не работаю на Nike. Просто пример использования здесь :)