Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 密码查询中的输入和排除节点_Neo4j_Cypher_Acl - Fatal编程技术网

Neo4j 密码查询中的输入和排除节点

Neo4j 密码查询中的输入和排除节点,neo4j,cypher,acl,Neo4j,Cypher,Acl,早上好 我想在Neo4J中构建一个结构,在这里我可以处理我的用户和组(类似于ACL)。其想法是为每个用户和每个组提供一个包含所有详细信息的节点。组应成为一个图,其中根组将具有子组,该子组也可以具有无限制的子组。这个关系将是-[:IS_SUBGROUP_OF]-到目前为止没有什么令人兴奋的。每个用户都将与一个组相关,该组具有-[:IS_MEMBER_OF]-以获得明确的分配。当然,用户可以是一个或多个组的成员。一些用户将使用不同的关系,如-[:IS_LEADER_OF]——来标识组的组长 我的任务

早上好

我想在Neo4J中构建一个结构,在这里我可以处理我的用户和组(类似于ACL)。其想法是为每个用户和每个组提供一个包含所有详细信息的节点。组应成为一个图,其中根组将具有子组,该子组也可以具有无限制的子组。这个关系将是-[:IS_SUBGROUP_OF]-到目前为止没有什么令人兴奋的。每个用户都将与一个组相关,该组具有-[:IS_MEMBER_OF]-以获得明确的分配。当然,用户可以是一个或多个组的成员。一些用户将使用不同的关系,如-[:IS_LEADER_OF]——来标识组的组长

我的任务:

  • 分配:我可以通过一个简单的查询查询组中的每个成员,我甚至可以使用当前登录并询问用户查询子组的成员:

    匹配(d1:组:本地)--(c:用户) 匹配(d:用户)-[:是|的|成员|是|的|领导者|]-(g:组:本地)-[:是|子组|的*0..]>(d1) 其中c.login=userLogin 返回不同的d.lastname、d.firstname

  • 我将每个相关用户与当前用户及其下的每个组(子组)联系起来。也许你有一个关于我如何改进查询或模型的提示

  • 认可
  • 在这里,我被绊住了,因为我想从查询用户和所有子组的所有成员中获得当前组的所有用户-除了当前组的领导。背后的原因是,团队领导不能为自己批准行动,但可以为其团队的所有其他成员和子团队的所有成员(包括其团队领导)批准行动

    我试图使用关系-[:IS_LEADER_OF]-来排除他们,但同时我也失去了小组的组长。是否有人知道我将如何更改模型,或者如何查询图表以获取除当前组组长以外的所有用户

    谢谢你抽出时间, 巴拉尔

    *编辑*

    我想我已经接近了,我只需要了解这两个查询的结果:

    MATCH (d:User) -- (g:Group) WHERE g.uuid = "xx" 
    RETURN  d.lastname, d.firstname
    
    返回此组中的所有用户,无论其关系如何(领导/成员)

    返回该组中除用户c以外的所有用户。我本来也希望在d-users的列表中得到c,因为c是该组的一部分,应该在(d:User)中找到


    我不理解这两个查询之间的区别,可能有人给了我一个提示?

    您可以稍微简化查询(但是这不应该对性能有影响):

    我不完全理解您的问题,但我假设您希望确保
    d1
    c
    没有通过
    关系的领导者连接。如果是,请尝试:

    MATCH (d:User) -[:IS_MEMBER_OF|IS_LEADER_OF]- (g:Group:Local)-[:IS_SUBGROUP_OF*0..]->(d1:Group:Local)-[r]-(c:User{login:"userlogin"})
    WHERE type(r)<>'IS_LEADER_OF'
    RETURN DISTINCT d.lastname, d.firstname
    
    MATCH(d:User)-[:是|的|成员|是|的|领导者|]-(g:Group:Local)-[:是|的子组|*0..]>(d1:Group:Local)-[r]-(c:User{login:“userlogin”})
    其中,类型(r)'是'
    返回不同的d.lastname、d.firstname
    
    跟进问题中的*编辑*
    匹配中
    指定路径。根据定义,路径不会两次使用同一关系。否则就有陷入无限递归的危险。查看上面“编辑”部分中的第二个查询:右侧部分匹配yy与该组的关系,而左侧部分匹配与该组相关的所有用户。为了防止同一关系的多次使用,左侧部分不使用yy

    非常感谢Stefan,我做了一些工作,我想我已经接近了。我用一个编辑部分更新了我的问题,也许你能帮我?谢谢。很好,很有意义,也很好地解决了我的问题,因为这样我可以轻松地解决他。谢谢Stefan的支持。
    MATCH (d:User) -[:IS_MEMBER_OF|IS_LEADER_OF]- (g:Group:Local)-[:IS_SUBGROUP_OF*0..]->(d1:Group:Local)--(c:User{login:"userlogin"})
    RETURN DISTINCT d.lastname, d.firstname
    
    MATCH (d:User) -[:IS_MEMBER_OF|IS_LEADER_OF]- (g:Group:Local)-[:IS_SUBGROUP_OF*0..]->(d1:Group:Local)-[r]-(c:User{login:"userlogin"})
    WHERE type(r)<>'IS_LEADER_OF'
    RETURN DISTINCT d.lastname, d.firstname