Neo4j hat den Pfad durch mehrere Beziehungen mit dem Eigenschaftenfilter geleitet

Da ich Cypher und Neo4j noch nicht kenne, habe ich Probleme, meine Abfrage für meinen Anwendungsfall zu erstellen. Ich erstelle eine einfache ACL (Access Control List) und suche nach einem Pfad durch Berechtigungsbeziehungen und einer Aufwärtshierarchie. Ein Bild könnte es besser erklären:

Key:
    Users -> Blue
    Groups -> Yellow, Green
    Resource Tree -> Red

Jetzt möchte ich sehen, ob ein Pfad von Bob zum existierteVar 33 Ressource, wo Bob hataktualisieren Zugriff. Da es einen direkten Pfad gibt, kann ich durch Laufen das erreichen, wonach ich suche

MATCH p =(usr:Usr)-[:AXO {update: true}]->(aco:ACO)
WHERE usr.name = 'Bob' AND aco.name = 'eVar 33'
RETURN p

Aber jetzt ist Bob auch Mitglied derMedienverwaltung Gruppe, die ihm gewährtlesen Zugang zumUmwandlung Ressource. Und weilUmwandlung ist weiter oben im Ressourcenbaum alseVar 33, eVar 33 sollte diese Erlaubnis erben. Aber wenn ich die selbe Abfrage suche{read: true} Stattdessen wird kein Pfad gefunden. Ich weiß, das liegt daran, dass ich nicht zulasse, dass das durchquert wird:IN und:HAS Beziehungen, aber wie kann ich das tun?

Ich habe versucht:

MATCH p =(usr:Usr)-[:IN|:HAS|:AXO {read: true}]->(aco:ACO)
WHERE usr.name = 'Bob' AND aco.name = 'eVar 33'
RETURN p

Ich denke, dies würde es ermöglichen, diese Beziehungen zu durchlaufen, aber es wird immer noch kein Pfad gefunden (weil ich nicht mehr als eine Tiefe von 1 zulasse?).

Also hier sind meine Bedürfnisse:

Unbekannte PfadtiefeAlle Pfade, die ich zurück erhalte, sind in Ordnung (alles, was mir wirklich am Herzen liegt, ist "Gibt es einen Pfad oder nicht?")Muss in der Lage sein, von einem Benutzer zu einer Ressource zu gelangen, UND wenn eine AXO-Beziehung verfolgt wird, muss sie mit einem Eigenschaftenfilter übereinstimmen.Muss dem gerichteten Diagramm folgen (z. B. hat Bob keine Berechtigungen fürAnalytics)

Und nein, ich arbeite nicht für Nike. Nur ein Anwendungsbeispiel hier :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage