在节点neo4j上设置瞬态属性

时间:2015-05-04 11:09:47

标签: neo4j cypher spring-data-neo4j

是否可以在cypher查询返回的节点上设置瞬态属性,使其仅对运行查询的用户可见。

这将允许我们将一些控制器逻辑直接卸载到Neo4j中并减少业务逻辑查询。

目前我有一个由

返回的列表
List<Post> newsFeed (Long uid) {}

Post是User和News节点之间的关系。

我有两个Post对象的子类:

  1. BroadcastedPost
  2. MentionedPost
  3. 我有两个cypher查询返回用户应该看到的帖子。

    列出从

    获得的广播
    MATCH (user:PlatformUser)-[:BROADCASTED]->post RETURN post;
    

    列出提到的从

    获得的邮件
    MATCH (user:PlatformUser)-[:MENTIONED]->post RETURN post;
    

    然后我使用Java instanceof来确定这是什么类型的帖子。根据类型,我可以做一些进一步的应用程序逻辑。

    然而这是低效的,因为我应该能够使用UNION运算符将两个查询组合成一个超级查询

    即列出newsFeed是通过查询直接获得的

    MATCH (user:PlatformUser)-[:BROADCASTED]->post RETURN post UNION MATCH (user:PlatformUser)-[:MENTIONED]->post RETURN post;
    

    但是,我该如何判断这是什么类型的帖子。我希望我可以暂时使用SET操作符来知道这是哪种帖子,但我相信这是用于保留属性。

1 个答案:

答案 0 :(得分:1)

Neo4j 2.2最近添加了以前版本中缺少的身份验证,但它仍然只是一个用户;您设置了一个登录名/密码来保护对数据库的访问权限,但是adding additional users需要额外的工作,并且没有明显的开箱即用的功能。

现在您要求的是保护每个用户对特定类型数据的访问权限。由于neo4j目前还没有很多用户管理功能,所以你要求的内容不能在neo4j中完成,因为为了保护这些数据远离Joe或Bob,DBMS必须知道它与Joe或Bob打交道。

您正在尝试做的事情通常由应用程序层由现在编写neo4j应用程序的人强制执行。所以它可以完成,但它是在您的自定义代码中完成的,而不是由数据库直接完成的。