'Cypher match any node connected to a node filtered by last relation

I have a neo4j graph looking like this:

(AdminUser) - [is_admin] -> (Tenat) - [can_edit,can_read] -> (Resource)

(RegularUser) - [can_edit] -> (Resource)

(RegularUser2) - [can_read] -> (Resource)

This a simplified version, so I want to get all Resource that a given user is connected on any path, but such that last relationship before Resource node is 'can_edit'

I would try something like

match(u:User{id:'regular'}) // I'd like to insert user id here

-[*]->(r:Resource)  // here not sure how to limit last relation as can_edit

In the example above, I'd like to get Resource when if I insert either AdminUser or RegularUser id, but not RegularUser2



Solution 1:[1]

You can do something simple like:

match(u:User{id:'regular'})-[*0..]->()-[:can_edit]->(r:Resource)  

This will make sure the the last relationship before the Resource is [:can_edit]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1