【发布时间】:2020-04-27 10:47:18
【问题描述】:
我正在尝试在 gremlin-server 中添加基本读/写授权,我想知道是否有一种方法可以识别此查询是只读查询还是写查询。
【问题讨论】:
标签: gremlin tinkerpop janusgraph tinkerpop3 gremlin-server
我正在尝试在 gremlin-server 中添加基本读/写授权,我想知道是否有一种方法可以识别此查询是只读查询还是写查询。
【问题讨论】:
标签: gremlin tinkerpop janusgraph tinkerpop3 gremlin-server
您无法通过 API 调用来确定这一点,但您可以从 ReadOnlyStrategy here 获得有关如何检测它的灵感。关键是循环Traversal对象,寻找实现Mutating接口的Step。如果您在其中找到其中一个,则可以将遍历分类为写入查询。
当然,对于 Gremlin 而言,对查询和读取或写入进行分类并不是那么二元化,因为它很容易成为读取和写入的混合体。也有可能在运行时写入可能永远不会执行,具体取决于遍历的流程,因此它可能是“运行时只读”。希望检测Mutating 接口对您来说是一个足够好的解决方案。
我不确定您打算在哪里实现此授权功能,但我觉得最好将其作为TraversalStrategy 完成,然后在遍历执行时触发。我不知道这对于您的授权过程是否为时已晚,但这将是我能想到的最简单的方法。问题是,如果您接受脚本,那么通过这种方法,您可以部分执行该脚本,直到不允许授权为止。如果您需要禁止基于一次写入遍历的整个脚本,那么您可能需要查看custom sandbox。当然,最好完全避免使用脚本,只使用基于字节码的请求。如果您只关心字节码,那么TraversalStrategy 应该可以很好地用于授权用例。
【讨论】:
ReadOnlyStrategy,一个不带。在您的授权步骤中,针对他们打算使用的遍历源授权用户,以确保他们可以这样做。这行得通吗?