我正在尝试为Neo4j定义用户管理和权限模型。我有一个Web应用程序(Angular 2)通过API(KOANEO4J)连接到Neo4j。 Neo4j是应用程序使用的唯一数据库或持久存储。通过该应用程序,用户可以通过运行Cypher语句来添加/编辑/删除使用API在Neo4j中执行这些指令的内容。到目前为止,我并不担心支持多个用户,但作为下一步,我开始考虑这个问题。
该产品将由多家不同公司使用,每家公司将拥有多个用户,因此我需要一些方法来支持这一点。我在Neo4J中考虑的模型如下:
“Orgaization”由一个节点表示,它可以有一个或多个“组织目录”。属于该目录的所有节点都将是其中一个“组织目录”的子节点。
每个用户也将由数据库中的节点表示。他们将属于一个组织。他们将对由边缘标识的组织目录具有某些访问权限。
非常感谢
答案 0 :(得分:1)
我正在寻找一些关于这是否合适的建议 要遵循的模型,或者是否有任何示例或文档 描述如何在Neo4j中实现这一点。
这个问题的答案是:它取决于。请记住,在对图形数据库建模时,应考虑向数据库提出的查询。如果此模型适合您向数据库询问的查询,那么此模型是合适的,否则不是。请参阅图书数据库一书的第5章(现实世界中的图表)(由Ian Robison,Jim Webber和Emil Eifrem撰写。可供下载here)。本章介绍了Neo4j中授权和访问控制系统的建模过程。可以启发并对您有所帮助。
如果我确实实施了这个模型,那么建模它会更好 权限作为单独的节点,以便用户连接到权限 节点(例如,只读访问)然后连接到 组织目录。
再次,这取决于。如果Permission实体与用户和组织目录之外的应用程序的其他实体有连接,请执行此操作。否则,我相信您的权限可以建模为用户和组织目录之间的关系。
有关如何让API真正使用此功能的任何建议 型号的类型。我确信我可以将用户ID传递给Neo4j作为其中一部分 每个查询然后过滤结果以仅显示用户拥有的节点 访问但这似乎不是一个非常优雅的解决方案 - 它也 意味着所有的安全性都取决于仔细编写 Cypher查询不泄漏用户不应该泄露的数据 访问。
在AngularJS客户端应用程序和Neo4j数据库之间添加另一层软件也许是一个好主意。这种方式在这个新的软件层(例如Node.js应用程序)中,您可以实现访问控制系统,然后验证经过身份验证的用户是否可以访问所请求的资源。