Java tinkerpop gremlin中有错误的函数吗?
我们有一个照片共享服务,可以允许或拒绝其他用户查看或不查看。我们将此服务公开为API/view?caller=userId&photoId=photoId。我们使用AWS Neptune Graph数据库服务来维护此授权,并使用tinkerpop java库 为了代码的可维护性,我们从其他类方法获取可能的路径,并从外部调用canUserView方法Java tinkerpop gremlin中有错误的函数吗?,java,gremlin,tinkerpop,Java,Gremlin,Tinkerpop,我们有一个照片共享服务,可以允许或拒绝其他用户查看或不查看。我们将此服务公开为API/view?caller=userId&photoId=photoId。我们使用AWS Neptune Graph数据库服务来维护此授权,并使用tinkerpop java库 为了代码的可维护性,我们从其他类方法获取可能的路径,并从外部调用canUserView方法 Public class Authorizer { List<Role> roles; public Auth
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);
}
}
公共类授权人{
列出角色;
公共授权人(列出角色){
this.roles=角色;
}
公共布尔canUserView(用户,字符串ID){
返回graph.V(user.getId()).hasLabel(“用户”)或(getPossibleTraversals(用户)).hasId(“photoId”)
}
私有GraphTraversal[]getPossibleTraversals(用户){
列表遍历=角色.getTraversal(用户).map(遍历->遍历).collect(收集器.toList())
返回遍历。toArray(GraphTraversal[]::新建);
}
}
在代码性能的角色类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
}
}
}
公共类角色{
公共图形Traversal getTraversal(用户){
如果(用户满足(本)){
return _uuu.V(“assumedUnavailableEvertexId”).hasLabel(“AbsolutelyNotable”);//假定此ID和标签
}否则{
return actualTraversal();//这将构造可能的遍历
}
}
}
如何为角色中的if案例返回失败遍历?有什么方法可以消除这种假设吗?我经常看到在遍历需要返回错误/问题指示时使用像
常量('Not allowed')
这样简单的方法
在这种情况下(如果需要编译器等进行干净的泛型检查),您需要从
遍历
开始,因为通过代码的不同路径现在可能返回不同类型的遍历。我不确定是否完全理解您的问题。您是否在寻求一种简单的方法来返回表示某个操作失败的遍历?我经常看到在这种情况下使用像constant('Not allowed')
这样简单的东西。是的,我需要遍历失败的东西。constant(“Not allowed”)的问题是,.constant()的返回类型是GraphTraversal。在成功的案例中,它将是GraphTraversal。如果我在没有type参数的情况下设置了返回类型,即public-GraphTraversal getTraversal(),那么我们的sonarqube会抱怨,泛型类型参数是must。在这种情况下,你能接受遍历吗?在Gremlin中,一次遍历可以根据它所使用的分支产生不同的结果,这一点并不少见。我想这很好。常量(“不允许”)将在此处工作。有时很难遵守Qube规则。谢谢@KelvinLawrence