求满足成员权限规则的Neo4j树形结构查询语句(需返回路径)
符合权限规则的Neo4j路径查询语句
业务背景
- Space节点通过
:PARENT_OF关系构建层级结构,节点包含privacy属性,取值为open或private - 用户与Space节点通过
:member_of关系关联,关系的role属性分为manager(管理员)和member(普通成员)
权限规则对应的查询语句
以下查询通过参数$userId(用户ID)和$topSpaceSlug(目标顶级空间标识),返回用户有权查看的空间路径:
MATCH (topSpace:Space {slug: $topSpaceSlug}) OPTIONAL MATCH (user:User {id: $userId})-[memberRel:member_of]->(topSpace) MATCH path = (topSpace)-[:PARENT_OF*]->(child:Space) WHERE // 规则1:用户是该顶级空间的管理员,可查看完整子空间树 (memberRel.role = 'manager') OR // 规则2:用户是该顶级空间的普通成员,仅查看隐私为open的子空间 (memberRel.role = 'member' AND child.privacy = 'open') OR // 规则3:顶级空间隐私为open,所有用户可查看其下隐私为open的子空间 (topSpace.privacy = 'open' AND child.privacy = 'open') RETURN path
说明
- 若用户未与顶级空间建立关联,但顶级空间为
open,则自动触发规则3,返回所有open属性的子空间路径 - 若用户同时满足多个规则(如既是管理员且顶级空间为open),规则1优先级最高,返回完整子空间树
内容的提问来源于stack exchange,提问作者Lorenz
相关产品推荐
相关产品推荐

