簡體   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