在尊重 ACL 的情况下使用 janusgraph 进行搜索

Using janusgraph for search while respecting ACL

我目前正在分析和尝试用于 ACL 图的 janusgraph。我已经将 elasticsearch 配置为索引后端。我们已经在我的公司广泛使用 elasticsearch 进行所有搜索和分析。 现在通过使用 janusgraph 处理框架,我可以在单个查询中尊重 ACL 数据的同时搜索某些数据或所有数据吗?

示例图如下。

g.addV('user').property('userId','u1').property('email','user1@fake.com').as('u1').
  addV('user').property('userId','u2').property('email','user2@fake.com').as('u2').
  addV('user').property('userId','u3').property('email','user3@fake.com').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 的同时,我可以尝试解决搜索用例的可能方法有哪些?

要获取用户有权访问的所有文件夹,您可以执行以下操作:

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 documentation 所有可用的搜索谓词