【发布时间】:2017-07-08 17:59:54
【问题描述】:
在一个新项目中,我决定将 mongodb 用于主数据库,但我对它的缺乏经验导致我对如何构建不同集合之间的关系有些困惑。
在我的例子中,我有一个 users 集合、一个“notes”集合和一个 groups 集合。笔记可以对不同的用户和组开放。如果用户是某个组的一部分,并且该组具有对笔记的读取权限,那么该用户也是如此。如果用户从组中删除,则他们不再有权访问该注释。但是,用户可能对每个用户都具有访问权限,即使他们从具有访问权限的组中删除,他们仍然可以看到该便笺。希望这是有道理的。
我面临的问题是设置权限,以便所有这些都是可能的。权限是否应该存储在笔记集合中?如果存储如下:
note: {id: xxxx, followers:[{id:user1, permission:write},{id:groupA, permission:read}]}
如果 user2 是 groupA 的一部分,我需要检查他们是否通过他们的 id 与节点相关联,如果不是,我将不得不检查每个可以看到该注释的组和看看他们的成员,如果不同的组有不同的权限,我得取最高权限。这似乎效率不高。
用户集合如下所示:
user: {id:user1, projects:[xxxxx, xxxxx], groups:[xxxxx,xxxx...]}
群组集合:
group: {id:groupA, projects:[xxxxx, xxxx...], users:[user2...]}
我正计划将组文档与项目和用户文档链接起来,这样,如果从项目中删除了该组,该项目就会从该组中删除。似乎 dbref 是最好的方法。
我浏览了最佳实践,我觉得我的整体结构很混乱,但我想不出其他方法。
【问题讨论】:
-
用户不能成为一个人组有什么原因吗?
-
如果用户登录,这两个集合将有完全不同的字段。我将示例限制为仅权限的相关信息。我不认为将用户作为一个组会限制我如何设置权限所需的检查数量,因为我仍然会检查每个组。
-
您的查询是什么样的?您是否更频繁地搜索特定笔记以查看哪些组和用户有权访问它,或者查找特定组或用户以查看哪些笔记有权访问?
-
我会说搜索特定的注释以查看哪些组和用户具有访问权限。我的一个想法是,当一个组被添加到笔记中时,该组中的所有用户都将被添加一个标签,该标签说明他们是从哪个组添加的。这样一来,便笺只会引用用户。