1
我想重新實現一個使用Neo4j的Web應用程序的ACL系統。匹配多個路徑之一(ACL)
該應用程序具有分層組織,其葉節點可以擁有任務。
有角色,有權限。用戶可以分配到組織或任務中的角色。這樣做應該賦予他們分配給該組織內角色的權限,任何後代以及任何擁有的任務。
此外,某些用戶被分配了一次性權限的組織不屬於角色的一部分。
我已經使用超邊設置了圖形,以模擬用戶x角色x組織和用戶x權限x組織交集。
我試圖問「是否有用戶在給定的任務或組織給定的權限(無論是通過直接分配到節點的角色或許可)?」
使用我已經部分地回答了這個問題:
MATCH (user:User)-[:MEMBER_OF]->(hyperedge:UserGroupRestriction)
WHERE user.userId = 1
MATCH (hyperedge)-[:ON]->(restriction)-[:OWNS|:PARENT_OF*0..3]->(t:Task { id:2 }),
(hyperedge)-[:ROLE]->(role:Role)-[:CAN]->(p:Permission { name: 'tasks.edit' })
RETURN count(restriction) > 0 AS `allowed`
但是這隻能對角色的限制,因爲我只在看MEMBER_OF
關係,其用戶連接到一組限制超邊緣。如何修改查詢,以便通過角色成員身份或分配的權限獲得真實結果?一次性權限超邊的節點標籤爲:UserPermissionRestriction
。
感謝您的任何洞察力,如果有意義,我願意重構圖形,因爲這只是概念的早期證明。
也許你可以編輯你的問題,並把這裏一些Cypher查詢來創建一個初始數據集和預期的結果......謝謝。 –