我们将用户权限标记为每个节点和边上的属性(SET 基数)。想知道对于给定的遍历 gremlin 查询,在所有访问过的节点/边上应用 has 步骤的最佳方法是什么。
就像一个非常简单的遍历查询: //从伦敦希思罗机场 (LHR) 飞往美国机场的航类
g.V().has('code','LHR').out('route').has('country','US').values('code')
使用上述查询进行遍历时,将 has('permission', 'team1')
添加到所有访问过的顶点和边。
最佳答案
您可以考虑两种方法。
对于 TraversalStrategy
,您可以开发一个类似于 SubgraphStrategy
或 PartitionStrategy
的策略,它将获取您的用户构造权限,然后自动注入(inject)必要的权限has()
步骤在 out()
/in()
种步骤之后。这里的缺点是您的 TraversalStrategy
必须用 JVM 语言编写,并且如果使用 Gremlin Server 则必须安装在服务器上。如果您打算以任何方式从客户端配置此 TraversalStrategy
,您将需要构建自定义序列化器才能实现这一点。
对于 DSL,您将为 out()
/in()
类型的步骤创建新的导航步骤,并且它们将插入导航步骤和 的适当组合>has()
步骤。 DSL 方法很好,因为您可以用任何编程语言编写它并且它可以工作,但它不允许服务器端配置,并且您必须始终确保客户端在查询图形时使用 DSL。
We are stamping user permission as a property (of SET cardinality) on each nodes and edges.
最后一点,“SET 基数”我假设你的意思是 multi-properties 。边不允许这些,因此您只能在顶点上标记这样的属性。
关于graph - 对于给定的遍历 gremlin 查询,如何在所有访问过的节点/边上应用静态步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63684159/