GraphDB帐户建模:用户访问关系是属性还是关系?

时间:2019-04-16 05:06:07

标签: graph neo4j graph-databases amazon-neptune

我正在尝试在图形数据库中对帐户访问进行建模。

该帐户可以具有多个用户和多个功能。用户可以访问许多帐户。每个帐户只能为每个用户提供部分功能的访问权限。

我看到的一种方式是通过关系属性表示每个用户的访问权限,这允许使用共享的特征节点。

user_1有权访问account_1-feature_1和account_2-feature-2。即使已为该帐户启用了user_1,也无法访问account_1-feature_2。

建模相同访问但没有关系属性的另一种方法是创建帐户特定的功能节点。

问题1:在图形数据库世界中,这两种方式中的哪一种是更“合适”的建模?

现在,为了使事情变得更加有趣,该帐户还可以具有可以由多个帐户访问的部分,并且应该可以将某个功能的范围缩小到只能由用户访问特定部分。

在此示例中,user_1只能访问part_a feature_1的帐户_1。

enter image description here

在我看来,在关系上定义属性似乎是可以按功能和部分帐户来缩小用户访问范围的方法。但是,读取neo4j powerpoints将是具有“很多类似属性的属性”的关系的代码味道之一。有没有更好的方法来解决图形中的此类问题?

1 个答案:

答案 0 :(得分:0)

我在这里可能是错的,但这是我的想法。从建模的角度来看,选项1绝对是更好的方法,但是,我不知道如何在不构建重型机械的情况下保持数据一致。例如,如果有人删除Account1.Feature1,并且没有从User1-> Account1更新边缘,那么您最终将在系统中拥有过时的RBAC规则。您认为您可以访问某些东西,但实际上,“事物”已不存在。从数据模型的角度来看,选项2似乎不太吸引人,但是它确实使您的数据保持一致。如果删除Account1.Feature1,则在同一事务中自动删除边。

唯一的缺点是,在插入时,您需要承担比选件1多得多的节点的插入费用。对于RBAC系统,我认为这是一个合理的折衷方案。

相同的注释也适用于您问题的下半部分。