是否可以在cypher查询返回的节点上设置瞬态属性,使其仅对运行查询的用户可见。
这将允许我们将一些控制器逻辑直接卸载到Neo4j中并减少业务逻辑查询。
目前我有一个由
返回的列表List<Post> newsFeed (Long uid) {}
Post是User和News节点之间的关系。
我有两个Post对象的子类:
我有两个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操作符来知道这是哪种帖子,但我相信这是用于保留属性。
答案 0 :(得分:1)
Neo4j 2.2最近添加了以前版本中缺少的身份验证,但它仍然只是一个用户;您设置了一个登录名/密码来保护对数据库的访问权限,但是adding additional users需要额外的工作,并且没有明显的开箱即用的功能。
现在您要求的是保护每个用户对特定类型数据的访问权限。由于neo4j目前还没有很多用户管理功能,所以你要求的内容不能在neo4j中完成,因为为了保护这些数据远离Joe或Bob,DBMS必须知道它与Joe或Bob打交道。
您正在尝试做的事情通常由应用程序层由现在编写neo4j应用程序的人强制执行。所以它可以完成,但它是在您的自定义代码中完成的,而不是由数据库直接完成的。