我希望通过在节点本身上实现自定义属性来拥有节点访问控制,并且难以确定最佳路径。对这些内容的访问需要即时确定,而无法事先确定。
例如:
假设我有
(bob:Person {name: "Bob",access:"1000000000}) - [:KNOWS] -
(adam:Person {name:"Adam",access:"110010000"})
基于访问对象,最多可以有512种不同的组合来确定对对象的访问。实际上,访问级别可能会有更多变化,并且将来可能会扩展。理想情况下,我将能够针对此数据库运行的任何查询过滤出节点/关系。我开始研究自定义程序,但是不确定这是否是最佳方法。
答案 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;