Ujin Metabase Embedding¶
app-metabase-embedding это Spring Boot сервис, который отвечает за безопасную выдачу embedded-виджетов
Metabase и за связанный с этим прикладной контур доступа.
Главная задача приложения:
- отдать клиенту дерево доступных виджетов и папок;
- выдать embed JWT для конкретного dashboard/card;
- применить ограничения доступа по
role,bms_id,bms_ids,instance_ids, LDAP-тегам и deny-list подпапок; - дать admin API для управления тегами, доступами к виджетам и on-prem routing;
- хранить пользовательское избранное;
- создавать Jira-задачи на analytics request и архитектурное ревью;
- публиковать Metabase export в GitLab и выполнять controlled deploy snapshot.
Основные сценарии¶
1. Widgets API¶
Основной пользовательский контур:
GET /api/metabase/widgetsGET /api/metabase/widgets/{id}GET /api/metabase/widgets/by-ids
Сервис получает структуру коллекций Metabase, фильтрует её по контексту пользователя и при необходимости генерирует embed token для виджета.
2. Settings API¶
Контур настройки доступов для token auth:
GET /api/metabase/settings/widgets/accessPATCH /api/metabase/settings/widgets/access
Используется для role-based модели доступа по source_key, bms_id, role_id, widget_id.
3. Admin API¶
Контур управления LDAP-пользователями, тегами и on-prem коробками:
- пользователи и назначенные теги;
- дерево подпапок с deny-list;
- матрица доступов виджетов по тегам;
domain -> instance_idдля routing.
Подробности: Admin
4. Favorites API¶
Пользовательское избранное хранится в сервисной БД и отдаётся как единое дерево с reorder.
Подробности: Favorites
5. Analytics / Architect Review¶
Сервис умеет создавать Jira-задачи на:
- analytics request;
- архитектурное ревью merge request.
Подробности: Analytics Request
Модель аутентификации и доступа¶
Token auth¶
Используется для внешних клиентских запросов, где доступ определяется по данным из routing БД:
user_idbms_idrole_idroleX-BMS-DOMENдля выбора routing source
LDAP auth¶
Используется для внутренних сотрудников:
- пользователь аутентифицируется через LDAP;
- root-коллекции определяются по назначенным тегам;
- фильтры
bms_idsиinstance_idsтакже задаются тегами; - подпапки внутри root-коллекций можно точечно запрещать на пользователя через deny-list;
- admin endpoints доступны только логинам из
app.ldap.adminLogins.
Хранилища данных¶
Сервис использует два независимых контура БД:
app.datasource-routing.*— бизнес-данные, пользователи, роли, on-prem routing source;app.storage-db.*— внутренняя сервисная БД с тегами, доступами, deny-list, избранным и on-prem mapping.
Это разделение важно для эксплуатации: routing БД и service storage БД не должны смешиваться.
Что смотреть дальше¶
- Обзор функционала
- Интеграции
- Покрытие API
- Виджеты
- Settings
- Admin
- Favorites
- Analytics Request
- Internal Deploy
- Полная схема взаимодействия
- OpenAPI snapshot
Swagger Links¶
- Swagger UI
- OpenAPI YAML
- Widgets API
- Settings API
- Admin API
- Favorites API
- Analytics Request API
- Internal Deploy API
Конфигурация¶
Ключевые группы настроек:
spring.ldap.*app.ldap.*app.datasource-routing.*app.storage-db.*metabase.*jira.*gitlab.*
Полный справочник по свойствам:
Локальный запуск документации¶
Web-версия этой документации собирается через MkDocs и нужна только как оболочка для чтения страниц:
docker compose up -d mkdocs
После запуска страница доступна по адресу: