此问题已从GitHub问题中移植出来:
在运行时,我想指定一个HTTP请求通过身份验证后使用的数据库连接(通过策略)。实现这一目标的最佳方法是什么?
例如,接收具有标题“tenant_id:smith”的GET请求以便列出所有用户(例如/用户)。我现在希望切换到“smith”Mongo DB来查询并返回该租户的相关数据。
来自particlebanana的回复:
现在不支持开箱即用。一个“连接”附加到一个集合,并发送到适配器注册自己,在您的情况下sails-mongo。
主要围绕postgresql适配器进行了一些讨论,以允许在查询中动态选择模式。这将在查询条件对象上附加一些可由适配器解析的可选参数。这不是我们已经开始的事情。一旦v0.10最终发布并且没有测试版,我们就可以通过这个并获得一个很好的解决方案。
现在,我能想到的唯一解决方案是一个自定义适配器,它包装sails-mongo适配器以动态选择要使用的数据库。
答案 0 :(得分:2)
警告:这是一种潜在的危险方法 - 相反,我们为每个租户创建一组模型:https://github.com/balderdashy/sails-mongo/issues/130
我取得了一些进展,现在似乎通过这种方法实现了一个实现:
我分叉了sails-mongo适配器来创建一个sails-mongo-multi适配器,我将其设置为所有相关模型的默认值(即需要多租户的模块)。
在adapter.js内,在registerConnection函数中,我为每个租户加载所有数据库配置,并为每个租户创建一个新的连接(传入该租户的配置)。这在启动时发生,所以现在我希望在添加新租户时重新启动Sails。
我创建了一个switchDB函数,它接受一个租户ID,并将迭代每个Collection对象并更新其中包含的连接。
我还更新了顶级连接对象(在调用本机查询时使用)。
如果发现任何易碎或破损的话,我会在此处发布更新。
答案 1 :(得分:0)
我已向[{3}}提交了一个拉请求来解决此问题。 见Waterline
我希望这会有所帮助,很快就会合并!我很乐意听到社区的任何反馈。