Привет от команды LoopBack ?
LoopBack 4 пока не предлагает первоклассную поддержку мультитенантности. Я открыл проблему GitHub, чтобы обсудить различные возможные решения, см. loopback-next # 5056 .
Один из вариантов - настроить класс репозитория, определяемый моделью c, чтобы установить схему на основе текущий пользователь. Это требует небольшого улучшения для реализации в @loopback/repository
, поэтому это решение в настоящее время не будет работать из коробки. Я кросс-публикация соответствующей части моего комментария ниже, см. Проблему GitHub для полного контекста.
Облегченная изоляция арендатора с использованием схем
В этой настройке уровень аутентификации и все арендаторы совместно используют то же имя базы данных и использовать те же учетные данные (пользователь базы данных) для доступа к данным. У нас есть 1 + N схем, определенных в базе данных: первая схема используется уровнем аутентификации, плюс у нас есть одна схема для каждого арендатора. Все запросы к базе данных будут использовать один и тот же источник данных LB и, следовательно, совместно использовать один и тот же пул соединений.
В плане реализации нам необходимо настроить способ регистрации модели LB4 в источнике данных. Вместо того, чтобы создавать одну и ту же модель поддержки жонглера для всех пользователей, мы хотим создать модели жонглера, определяемые арендатором c.
Концептуально это можно сделать, настроив конструктор репозитория.
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},
);
}
}