Mongoose 和 Node.js 多租户架构

Posted

技术标签:

【中文标题】Mongoose 和 Node.js 多租户架构【英文标题】:Mongoose and Node.js multi tenant architecture 【发布时间】:2015-09-11 01:04:48 【问题描述】:

我正在构建一个使用如下多租户架构的应用程序

用户架构

tenant_name:用户名 tenant_id:对象 ID

多租户数据库

猫鼬模式

小部件:小部件的数据 区域:小部件的位置 Tenant_identifier:来自用户架构的 ObjectID

API

我已经使用 webtokens 实现了登录,并且我能够识别登录的用户等。API 的最佳实现是什么,它只返回基于tenant_id 的多租户数据库中的记录。

我是否可以编写一个访问层来过滤 API 服务器中的数据,或者我应该在 mongoose 的 findBy 例程中传递 objectID。我正在寻找一些设计模式来实现。

我使用 DaftMonks Generator 作为起点https://github.com/DaftMonk/generator-angular-fullstack

谢谢

【问题讨论】:

【参考方案1】:

您应该将 ObjectId 添加到查询中,并且在从数据库中检索数据后过滤数据。

使用 ObjectId 作为额外的查询条件(与您查询的任何其他条件进行隐式 AND 运算)不仅会限制数据库必须返回的数据量,而且有了适当的索引,它也会很快。

【讨论】:

好的,objectId 过滤器是在 multi-tenant-db.find 调用中使用还是作为 pre find 中的挂钩? @UmaMaheshwaraa 我不明白如何在挂钩中使用它(因为挂钩在系统范围内应用)。所以,是的,你会在.find* 通话中使用它。 嗯.. 我认为在中间件或其他层中应该有更好的方法。我将如何构建有权查看所有 id 的管理员和超级管理员角色.. @UmaMaheshwaraa 也许你可以使用mongoose-access-plugin 这似乎是一种有趣的访问控制方式。会看看那个。

以上是关于Mongoose 和 Node.js 多租户架构的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - Mongoose - 在这种情况下,我应该如何分配多个多对一关系?

什么是多租户saas架构设计

1.5 多租户

架构02-构建多租户

多租户管理的核心思想和架构设计

如何理解多租户架构?