我正在使用图形数据库对权限系统进行建模。这是一个示例方案:
用户u1
具有直接权限,并且在具有权限并扩展另一个组的组g1
中。
用户也manage
使用系统s1
,并且可以将与s1
相关的权限授予其他用户。
基本上,我需要做的是获得我的u1
的所有权限。我怀疑这是一个简单的查询,但是我对gremlin感到很困难。
我尝试过repeat()
,out()
,emit()
,path()
等的组合,但是找不到我需要的东西。我尝试过的所有操作返回的节点多于所需节点(例如,权限路径中的组节点,或与系统相关的权限),或者节点数少(例如未达到G2
)
所以总结一下,我需要的是:
gremlin> g.V('u1').__misteriousQueryThatShouldntBeThatHard()
==> v[p1]
==> v[p2]
==> v[p3]
==> v[p4]
感谢任何帮助。
如果上一个问题中Kfir回答的唯一问题是将路径限制为某些边缘标签,则可以尝试:
g.V('u1')
.repeat(out('is-in', 'extends', 'has-permission').simplePath())
.until(hasLabel('Permission'))