如何在 gremlin 中区分 select 和 add/update 查询?
How to differentiate select and add/update query in gremlin?
我有一个允许用户从 UI 推送 Gremlin 查询的应用程序,这些查询在后端 gremlin 服务器上执行。
我只想允许 select 查询。即任何 update/modify 现有图形的查询都不应被允许,而所有 return 不改变图形的查询都可以。
喜欢:
g.V().label() //allowed
g.V(1).properties() //allowed
g.V(1).property('name', 'new name') // not allowed
我应该如何确定允许哪些查询,哪些不允许?
在服务器端防止突变的一种简单方法是在 Gremlin 服务器中配置 "g" ReadOnlyStrategy
。在 conf/gremlin-server-modern-readonly.yaml
中的默认 Gremlin 服务器分发中可以找到此方法的示例。兴趣线是 here which uses the initialization script of scripts/generate-modern-readonly.groovy
(here) - 它的要点是:
def globals = [:]
...
globals << [g : graph.traversal().withStrategies(ReadOnlyStrategy.instance(), ReferenceElementStrategy.instance())]
我有一个允许用户从 UI 推送 Gremlin 查询的应用程序,这些查询在后端 gremlin 服务器上执行。
我只想允许 select 查询。即任何 update/modify 现有图形的查询都不应被允许,而所有 return 不改变图形的查询都可以。
喜欢:
g.V().label() //allowed
g.V(1).properties() //allowed
g.V(1).property('name', 'new name') // not allowed
我应该如何确定允许哪些查询,哪些不允许?
在服务器端防止突变的一种简单方法是在 Gremlin 服务器中配置 "g" ReadOnlyStrategy
。在 conf/gremlin-server-modern-readonly.yaml
中的默认 Gremlin 服务器分发中可以找到此方法的示例。兴趣线是 here which uses the initialization script of scripts/generate-modern-readonly.groovy
(here) - 它的要点是:
def globals = [:]
...
globals << [g : graph.traversal().withStrategies(ReadOnlyStrategy.instance(), ReferenceElementStrategy.instance())]