Neo4j Node安全访问控制

时间:2018-11-12 15:06:36

标签: neo4j

我希望通过在节点本身上实现自定义属性来拥有节点访问控制,并且难以确定最佳路径。对这些内容的访问需要即时确定,而无法事先确定。

例如:

假设我有

(bob:Person {name: "Bob",access:"1000000000}) - [:KNOWS] -
  (adam:Person {name:"Adam",access:"110010000"})

基于访问对象,最多可以有512种不同的组合来确定对对象的访问。实际上,访问级别可能会有更多变化,并且将来可能会扩展。理想情况下,我将能够针对此数据库运行的任何查询过滤出节点/关系。我开始研究自定义程序,但是不确定这是否是最佳方法。

1 个答案:

答案 0 :(得分:0)

如果每个数据库用户都有一个特定的access字符串,并且他/她只能访问具有相同access值的节点/关系,那么对此进行过滤非常容易。

例如,要获取所有用户可见的路径(假设用户的access值是通过$access parameter传递的):

MATCH p=(a:Person)-[k:KNOWS]->(b:Person)
WHERE
  a.access = $access AND
  k.access = $access AND
  b.access = $access
RETURN p;

或更笼统(但可能效率较低):

MATCH p= <an arbitrary path expression>
WHERE
  ALL(n IN NODES(p) WHERE n.access = $access) AND
  ALL(r IN RELATIONSHIPS(p) WHERE r.access = $access)
RETURN p;