简体   繁体   English

使用带有父级检查的gremlin查询ACL图

[英]Query ACL graph using gremlin with parent hierarchy check

my ACL graph 我的ACL图

In Summary every user or group who have access to Folder1 will have access to File1 总结中,每个有权访问Folder1的用户或组都将有权访问File1

usecase #1 - checking access for user1 on Folder1, which works fine with below gremlin 用例#1-检查对Folder1上的user1的访问,在下面的gremlin下可以正常工作

g.V().has('user','userId','user1').
  emit().
    until(__.not(outE('member_of'))).
    repeat(out('member_of')).
  filter(outE('has_permission').has('permission','VS_F').
           inV().has('folder','folderId','Folder1')).hasNext()

usecase #2 - checking access for user1 on File1, how can modify above gremlin to achieve this ? 用例#2- 检查对File1上的user1的访问,如何在上述gremlin上进行修改以实现此目的 im pretty much new to gremlin and doing a POC on janusgraph for my employer. 对gremlin来说,我是新手,并为我的雇主在janusgraph上进行了POC。

First things first: You should always start with a script that people can run to create your sample graph. 首先,您应该始终从一个脚本开始,人们可以运行该脚本来创建示例图。 Also, formatting the code in your question wouldn't hurt. 此外,格式化问题中的代码也不会受到伤害。

With that said, here's the script that creates your graph: 话虽如此,以下是创建图形的脚本:

g = TinkerGraph.open().traversal()
g.addV('user').property('userId','user1').as('u1').
  addV('user').property('userId','user2').as('u2').
  addV('user').property('userId','user3').as('u3').
  addV('group').property('groupId','group1').as('g1').
  addV('group').property('groupId','group2').as('g2').
  addV('group').property('groupId','group3').as('g3').
  addV('folder').property('folderId','folder1').as('f1').
  addV('file').property('fileId','file1').
  addE('in_folder').to('f1').
  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()

...and the query you're looking for: ...以及您要查找的查询:

g.V().has('file','fileId','file1').
  until(inE('has_permission')).
    repeat(out('in_folder')).as('folder').
  V().has('user','userId','user1').
  emit().
    until(__.not(outE('member_of'))).
    repeat(out('member_of')).
  filter(out('has_permission').where(eq('folder'))).hasNext()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM