【发布时间】:2020-03-25 15:03:28
【问题描述】:
我有 3 个模型(项目、组织、用户),其架构如下所示。我使用的是 mongo 4.2.0 版和 Moongoose 5.1.1 版。
问题
给定一个特定用户,我如何查询他们有权访问的所有项目:
通过在项目本身中的直接角色
或通过项目所属组织中的直接角色
用户可以在某个组织中担任角色,但可能不在其某个项目中。不过,查询应该能够获取这些项目(用户具有更高级别的访问权限)。
示例
Projects
[
{
"_id" : ObjectId("1184f3c454b1fd6926c324fd"),
"organizationId" : ObjectId("1284f3c454b1fd6926c324fd"),
"roles" : [
{
user: ObjectId("1314f3c454b1fd6926c324fd"),
role: 'Bar'
}
]
},
{
"_id" : ObjectId("1172f3c454b1fd6926c324fd"),
"organizationId" : ObjectId("1284f3c454b1fd6926c324fd"),
"roles" : [
{
user: ObjectId("1313f4c584b1fd6926c324fd"),
role: 'Bar'
}
]
}
]
Organizations
{
"_id" : ObjectId("1284f3c454b1fd6926c324fd"),
"roles" : [
{
user: ObjectId("1314f3c454b1fd6926c324fd"),
role: 'Bar'
}
]
}
Users
{
"_id" : ObjectId("1314f3c454b1fd6926c324fd"),
"name": "Foo"
}
备注
这两个项目属于同一个组织。
用户“Foo”属于该组织,但只能直接访问其中一个项目。
相关查询应为用户“Foo”返回两个项目。
是否应该合并两个不同的查询?
【问题讨论】:
标签: mongodb mongoose mongoose-populate