是否有办法知道gremlin查询是读取查询还是写入查询

问题描述 投票:0回答:1

我正在尝试在gremlin服务器中添加基本的读/写授权,我想知道是否有一种方法可以识别此查询是只读查询还是写查询。

gremlin tinkerpop janusgraph tinkerpop3 gremlin-server
1个回答
0
投票
您无法进行API调用来确定这一点,但是您可以从ReadOnlyStrategy here中获得如何检测它的灵感。关键是循环Traversal对象并寻找实现Step接口的Mutating。如果在其中找到其中之一,则可以将遍历分类为写查询。

当然,对于Gremlin,对查询和读或写进行分类不是二进制的,因为它很容易将读和写混合在一起。也有可能在运行时根据遍历的流而从未执行写入,因此它可能是“运行时只读”。希望检测到Mutating接口对您来说是一个很好的解决方案。

我不确定您打算在哪里实现此授权功能,但我认为最好将其作为TraversalStrategy完成,然后在遍历执行时触发。我不知道您的授权流程是否为时已晚,但这是我可以想到的最简单的方法。问题是,如果您接受脚本,那么采用这种方法,您可能会部分执行该脚本,直到不允许授权为止。如果您需要基于一次写遍历禁止整个脚本,则可能需要查看custom sandbox。当然,最好完全避免使用脚本,而只使用基于字节码的请求。如果只关心字节码,那么TraversalStrategy在授权用例中应该可以很好地工作。

© www.soinside.com 2019 - 2024. All rights reserved.