Neo4j Узел контроля доступа безопасности - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужны средства управления доступом к узлам путем реализации пользовательских свойств на самих узлах и с трудностями при определении наилучшего пути. Доступ к ним должен быть определен на лету и не может быть определен заранее.

Например:

Допустим, у меня есть

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

На основе объекта доступа может быть до 512 различных комбинаций для определения доступа к объекту. На самом деле уровень доступа может иметь еще больше вариаций и может расширяться в будущем. В идеале я мог бы отфильтровать узлы / отношения для любого запроса, который выполняется к этой БД. Я начал изучать пользовательские процедуры, но не уверен, что это лучший подход.

1 Ответ

0 голосов
/ 14 ноября 2018

Если у каждого пользователя БД есть определенная строка access, и он / она может получить доступ только к узлам / отношениям с одинаковым значением access, тогда это очень легко отфильтровать для этого.

ДляНапример, чтобы получить все видимые пользователю пути (при условии, что значение access пользователя передается через $access параметр ):

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...