Мультитенантность
Руководство по мультитенантной архитектуре платформы.
Что такое мультитенантность
Мультитенантность позволяет одной инсталляции платформы обслуживать множество независимых маркетплейсов (арендаторов/tenants).
Модель данных
Tenant (Арендатор)
Каждый маркетплейс представлен записью в таблице tenants
:
CREATE TABLE tenants (
id UUID PRIMARY KEY,
name TEXT NOT NULL,
domain TEXT UNIQUE,
status TEXT DEFAULT 'active',
owner_id UUID REFERENCES auth.users(id),
created_at TIMESTAMP DEFAULT NOW()
);
Изоляция данных
Все пользовательские данные привязаны к конкретному tenant:
- Продукты:
tenant_id
в таблицеproducts
- Заказы:
tenant_id
в таблицеorders
- Пользователи маркетплейса:
tenant_id
в таблицеmarketplace_users
Идентификация tenant
По домену
Основной способ идентификации - через домен:
// Получение tenant по домену
const getTenantByDomain = async (domain: string) => {
const { data } = await supabase
.from('tenants')
.select('id')
.eq('domain', domain)
.single();
return data?.id;
};
По поддомену
Поддержка поддоменов на servicium.ru:
// example: shop1.servicium.ru -> tenant = "shop1"
const subdomain = domain.split('.')[0];