Перейти к содержанию

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/widgets
  • GET /api/metabase/widgets/{id}
  • GET /api/metabase/widgets/by-ids

Сервис получает структуру коллекций Metabase, фильтрует её по контексту пользователя и при необходимости генерирует embed token для виджета.

2. Settings API

Контур настройки доступов для token auth:

  • GET /api/metabase/settings/widgets/access
  • PATCH /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_id
  • bms_id
  • role_id
  • role
  • X-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 БД не должны смешиваться.

Что смотреть дальше

Конфигурация

Ключевые группы настроек:

  • spring.ldap.*
  • app.ldap.*
  • app.datasource-routing.*
  • app.storage-db.*
  • metabase.*
  • jira.*
  • gitlab.*

Полный справочник по свойствам:

Локальный запуск документации

Web-версия этой документации собирается через MkDocs и нужна только как оболочка для чтения страниц:

docker compose up -d mkdocs

После запуска страница доступна по адресу: