tinkerpop gremlin 中是否存在虚假功能?

Is there a false function in tinkerpop gremlin?

我们有一个照片共享服务,其中一个可以允许或拒绝其他组用户查看或不查看。我们将此服务公开为 API /view?caller=userId&photoId=photoId。我们正在使用 AWS Neptune Graph 数据库服务来维护此授权并使用 tinkerpop java 库。

为了代码的可维护性,我们从其他 class 方法中获取可能的路径,并从外部调用 canUserView 方法。

Public class Authorizer {
    List<Role> roles;
    
    public Authorizer(List<Role> roles) {
        this.roles = roles;
    }
    
    public boolean canUserView(User user, String photoId) {
        return graph.V(user.getId()).hasLabel("user").or(getPossibleTraversals(user)).hasId("photoId")
    }

    private GraphTraversal<Object, Vertex>[] getPossibleTraversals(User user) {
        List<GraphTraversal<Vertex, Vertex>> traversals = roles.getTraversal(user).map(traversal -> traversal).collect(Collectors.toList())
        return traversals.toArray(GraphTraversal[]::new);
    }
}

并且在 class getTraversal 的角色中用于代码性能,根据用户信息我提供所需的遍历或者我可以提供失败的遍历。

现在的问题是如何在这里提供故障遍历。现在我们假设一些不可用的顶点 Id 用于失败遍历。代码如下。

public class Role {

    public GraphTraversal<Object, Vertex> getTraversal(User user) {
        if(user.satisfies(this)) {
            return __.V("assumedUnavailableVertexId").hasLabel("absolutelynotpossible"); //This ID and label assumed
        } else {
            return actualTraversal();   //This will construct the possible traversals
        }
    }
}

如何returnRole中if case的失败遍历?有什么办法可以消除这个假设吗?

我经常看到像 constant('Not allowed') 这样简单的东西,当遍历需要 return 指示存在 error/issue.

时使用

在这种情况下(如果您需要从编译器等处进行干净的通用检查),您需要从类似 Traversal <Object,Object> 的内容开始,因为通过代码的不同路径现在可能 return 不同类型的遍历.