gpt4 book ai didi

loopbackjs - Loopback 4 中基于模式的 Multi-Tenancy

转载 作者:行者123 更新时间:2023-12-03 16:49:35 25 4
gpt4 key购买 nike

用例

在基于模式的 Multi-Tenancy 应用程序中,通常有一个具有多个模式的数据库。一种模式是存储通用应用程序数据的主要模式,一种用于应用程序的每个租户。每次有新客户注册到系统时,都会在数据库中自动创建一个新的隔离模式。这意味着,模式是在运行时创建的,并且事先不知道。客户的模式是根据客户的域命名的。当请求进入系统时,用户将得到验证并使用主模式上的数据选择模式。然后大多数/所有后续数据库操作都转到租户特定的模式。如您所见,我们要使用的模式仅在运行时才知道。

问题

如何在运行时选择模式?我们正在使用 postgres 连接器。我们应该能够在运行时切换模式。

另一个问题是如何为不同的租户运行迁移?

笔记:

db-schema 需要以请求范围的方式设置,以避免为可能属于其他客户的其他请求设置架构。为整个连接设置架构不是一个选项。

最佳答案

来自 LoopBack 团队的问候 👋

LoopBack 4 尚未提供一流的 Multi-Tenancy 支持。我打开了一个 GitHub 问题来讨论不同的可能解决方案,请参阅 loopback-next#5056 .

一种选择是调整特定于模型的 Repository 类以根据当前用户设置模式。这需要在 @loopback/repository 中实现一个小的增强。 ,因此此解决方案目前无法开箱即用。我在下面交叉发布了我评论的相关部分,有关完整上下文,请参阅 GitHub 问题。

使用模式进行轻量级租户隔离

在此设置中,身份验证层和所有租户共享相同的数据库名称并使用相同的凭据(数据库用户)访问数据。我们在数据库中定义了 1+N 个模式:第一个模式由身份验证层使用,另外我们为每个租户有一个模式。所有数据库查询将使用相同的 LB 数据源,因此共享相同的连接池。

在实现方面,我们需要调整 LB4 模型如何注册到数据源的方式。我们不想为所有用户创建相同的支持 juggler 模型,而是希望创建特定于租户的 juggler 模型。

从概念上讲,这可以通过调整 Repository 构造函数来实现。

export class ProductRepository extends DefaultCrudRepository<
Product,
typeof Product.prototype.id
> {
constructor(
@inject('datasources.db') dataSource: juggler.DataSource,
@inject(SecurityBindings.USER) currentUser: UserProfile,
) {
super(
// model constructor
Product,
// datasource to use
dataSource,
// new feature to be implemented in @loopback/repository:
// allow repository users to overwrite model settings
{schema: currentUser.name},
);
}
}

关于loopbackjs - Loopback 4 中基于模式的 Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60680275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com