的文档都在那里。注意:第一句:
通过使用用户定义的过程和自定义角色,一个 管理员可以限制 指定的图形部分用户的访问和后续行动。
对于没有写入权限的用户来说,这种方法似乎是为他们创建适当的角色,然后创建(或使用现有的)用户定义的过程来执行允许他们执行的操作。然后将过程的权限配置到适当的级别,并将过程的角色(通过修改dbms.security.procedures.roles
)与您先前创建的角色相关联。这允许您创建的过程由您关联的角色执行。
例如,如果HR用户没有写权限,则可以创建一个过程来创建或删除:Employee节点之间的REPORTS_TO关系。该过程需要设置为mode = WRITE,因为它需要写入权限。这通常不会由此HR用户执行,因为他们没有写权限。
但是,如果您创建了一个角色,请说'hr',并将该角色添加到此用户,并将该过程设置为可供dbms.security.procedures.roles
中的hr角色访问,那么hr用户可以执行此过程,执行必要的写入操作。
总之,Neo4j的子图访问控制没有在节点或标签本身上定义,也不适用于在Cypher中执行写入语句。此访问控制特定于用户定义的过程,并允许具有某些角色(如果角色与这些过程相关联)的用户执行这些过程,即使他们通常由于其访问级别而无法访问。
编辑
,可以为你工作的最后一件事... Neo4j的具有注册transaction event handlers可对正在进行的交易进行检查和逻辑,并拒绝如果一些不符合标准的手段。我会假设你可以在这里获得用户的角色,并且可能检查某个标签上的作者操作的事务。奇怪的是,在确保文档的子图部分没有提及这一点。我自己没有尝试过这种方法(稍后我会尝试自己的测试),所以我不确定它是否能够满足您的需求,但值得一看。
感谢您的回答。首先,我认为这是其他程序功能。 我之后将你的解释真实地表达出来,因为它完全不符合我们的预期。 创建一个如此难以使用的系统真的很奇怪(编码java /创建jar,部署,重新启动服务器) 我们正在寻找更具动态性的,而不是史前的,我们可能使用OrientDB 来重新编写图形层, 再次感谢! – user954156
我在交易处理程序中添加了一个可能的替代方案,它也可能适用于您。 – InverseFalcon