繁体   English   中英

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

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

我的ACL图

总结中,每个有权访问Folder1的用户或组都将有权访问File1

用例#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()

用例#2- 检查对File1上的user1的访问,如何在上述gremlin上进行修改以实现此目的 对gremlin来说,我是新手,并为我的雇主在janusgraph上进行了POC。

首先,您应该始终从一个脚本开始,人们可以运行该脚本来创建示例图。 此外,格式化问题中的代码也不会受到伤害。

话虽如此,以下是创建图形的脚本:

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()

...以及您要查找的查询:

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