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:来自用户架构的 ObjectIDAPI
我已经使用 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 多租户架构的主要内容,如果未能解决你的问题,请参考以下文章