【发布时间】:2018-01-25 09:51:28
【问题描述】:
我们有一个节点树。一些节点被标记为红色。我们还有一个用户 DAG(绿色),可能嵌套在组中(黄色)。用户和组可以看到红色节点(与非红色节点没有“看到”关系)
是否可以编写一个密码查询,对于给定的用户 U 和节点 N 检查(或返回 N)如果 U(直接或间接通过组)可以看到从根 (id = 0) 到路径上的所有红色节点N?
我定义了结构,以便在需要时可以进行任何更改。
例子:
- 条件不满足 U=12 和(N = 3 或 N = 红色高于 3)
- 满足 U = 7 和 N = 3 的条件
我的尝试:
我可以轻松选择从根到N的所有读取节点。我可以轻松选择从U到路径上红色节点的路径。但我不知道如何定义“全部”限制。有可能吗?
Neo4j 控制台链接:http://console.neo4j.org/?id=bigdba
图表来源:
create (n1:node), (n2:node), (n3:node:red {name:'red'}),
(n1)-[:contains]->(n2), (n2) - [:contains] -> (n3),
(n3) - [:contains] -> (n4:node),
(n2) - [:contains] -> (n5:node),
(n5) - [:contains] -> (n6:node),
(n5) - [:contains] -> (n7:node:red {name:'red'}),
(u1:user) - [:inside] -> (g1:group),
(u1) - [:inside] -> (g2:group),
(u2:user) - [:inside] -> (g1),
(g1) - [:inside] -> (g3:group),
(g3) - [:see] -> (n3),
(u3:user) - [:see] -> (n7)
【问题讨论】:
标签: graph neo4j cypher graph-databases