Использование janusgraph для поиска при соблюдении ACL

В настоящее время я анализирую и пытаюсь использовать janusgraph для графа ACL. Я настроил elasticsearch как серверную часть индекса. В моей компании мы уже активно используем elasticsearch для поиска и аналитики. Теперь, используя структуру обработки janusgraph, могу ли я выполнять поиск определенных данных или всех данных, соблюдая данные ACL в одном запросе.

Пример графика ниже.

g.addV('user').property('userId','u1').property('email','[email protected]').as('u1').
  addV('user').property('userId','u2').property('email','[email protected]').as('u2').
  addV('user').property('userId','u3').property('email','[email protected]').as('u3').
  addV('group').property('groupId','g1').as('g1').
  addV('group').property('groupId','g2').as('g2').
  addV('group').property('groupId','g3').as('g3').
  addV('folder').property('folderId','f1').property('name','folder 1test').property('inheritance',false).as('f1').
  addV('folder').property('folderId','f2').property('name','folder 2test').property('inheritance',true).as('f2').
  addV('folder').property('folderId','f3').property('name','folder 3test').property('inheritance',true).as('f3').
  addV('file').property('fileId','f1').property('title','file title1')
  addE('in_folder').to('f1').
  addE('in_folder').from('f2').to('f1').
  addE('in_folder').from('f3').to('f2').
  addE('member_of').from('u1').to('g1').
  addE('member_of').from('u2').to('g2').
  addE('member_of').from('u3').to('g3').
  addE('member_of').from('g3').to('g1').
  addE('has_permission').from('g1').to('f1').
  addE('has_permission').from('u2').to('f1').iterate()

пример использования, получить все узлы папок, к которым у пользователя user1 есть доступ? будут намного более сложные запросы, агрегаты, частичный текстовый поиск, регулярные выражения, прогнозы и т. д. эластичных функций.

Я хочу знать, могут ли janusgraph и gremlin заменить прямые вызовы эластичного индекса. как я могу попытаться решить варианты использования поиска, соблюдая ACL с тем же запросом?


person VT0906    schedule 29.08.2019    source источник


Ответы (1)


чтобы получить все папки, к которым у пользователя есть доступ, вы можете:

g.V().has('user', 'userId', 'user1').emit().repeat(out('member_of'))
.out('has_permission').emit().repeat(__.in('in_folder').has('inheritance',true))

Используя возможности эластичного поиска, вы можете найти все папки любого пользователя, например, адрес электронной почты, начинающийся с «u» и заканчивающийся на «@ fake.com»:

g.V().hasLabel('user').has('email',textContainsRegex("u.*@fake.com")).emit().repeat(out('member_of'))
.out('has_permission').emit().repeat(__.in('in_folder').has('inheritance',true))

Ознакомьтесь со всеми доступными предикатами поиска в документации JanusGraph.

person Kfir Dadosh    schedule 30.08.2019