如何解决tinkerpop gremlin 中是否有错误函数?
我们有一个照片共享服务,可以允许或拒绝其他用户查看。我们将此服务公开为 API /view?caller=userId&photoId=photoId。我们使用 AWS Neptune Graph 数据库服务来维护此授权并使用 tinkerpop Java 库。
为了代码的可维护性,我们从其他类方法中获取可能的路径,并从外部调用 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);
}
}
在用于代码性能的角色类 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
}
}
}
如何返回Role中if case的失败遍历?有什么办法可以消除这个假设吗?
解决方法
当遍历需要返回存在错误/问题的指示时,我经常看到像 constant('Not allowed')
这样简单的东西。
在这种情况下(如果您需要从编译器等进行干净的通用检查),您需要从 Traversal <Object,Object>
之类的东西开始,因为通过您的代码的不同路径现在可能会返回不同类型的遍历。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。