Files
marketplaces/docs/platform/07-tenant-system.md

56 lines
2.3 KiB
Markdown
Raw Normal View History

2026-07-05 04:23:47 +04:00
# 07. Tenant System
## Назначение
Tenant System обеспечивает запуск нескольких независимых магазинов на единой платформе через доменное разделение и конфигурационный bootstrap.
## Поведение системы
- Tenant определяется только по hostname запроса.
- По tenant выбираются конфигурации bootstrap, тема, локализация и API base.
- Frontend не хранит статических tenant-switch правил в коде.
## Обязательные свойства JSON
- tenant.id
- tenant.slug
- tenant.host
- tenant.defaultLocale
- tenant.supportedLocales
- tenant.defaultCurrency
## Опциональные свойства JSON
- tenant.timezone
- tenant.brandName
- tenant.websiteBaseUrl
- tenant.builderBaseUrl
- tenant.backofficeBaseUrl
## Строгие правила
- Нельзя определять tenant через query params или localStorage как источник истины.
- Нельзя хардкодить tenant ID внутри компонентов.
- Один домен может быть связан только с одним активным tenant в момент запроса.
- При отсутствии tenant-конфигурации runtime должен завершаться контролируемой ошибкой.
## Пример tenant JSON
```json
{
"tenant": {
"id": "tenant-lavero",
"slug": "lavero",
"host": "lavero.marketplace.com",
"defaultLocale": "ru",
"supportedLocales": ["ru", "en", "hy"],
"defaultCurrency": "RUB",
"timezone": "Europe/Moscow"
}
}
```
## Ответственность Frontend
- Резолвить tenant на старте приложения.
- Использовать tenant-параметры для формирования маршрутов, локали и API-слоя.
- Исключать fallback на чужой tenant без явной backend-политики.
## Ответственность Backend
- Поддерживать доменно-tenant маппинг.
- Возвращать корректную tenant-конфигурацию и bootstrap.
- Контролировать изоляцию данных между tenants.