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

Metabase Settings Controller

Контроллер: tech.ujin.api.MetabaseSettingsController

Эндпоинты

- GET /api/metabase/settings/widgets/access?roleId=141 - Возвращает дерево категорий/виджетов с флагом available для выбранной роли. - JWT embed-токены не генерируются.

- PATCH /api/metabase/settings/widgets/access - Изменяет доступность виджета или категории. - Для категории изменение каскадно применяется ко всем дочерним виджетам.

Пример тела:

{
  "roleId": 141,
  "targetId": 1001,
  "targetType": "CATEGORY",
  "available": true
}

Security

  • Endpoint доступен только для TokenAuth.
  • LDAP BasicAuth на этом пути отклоняется политикой SecurityConfig (403).
  • Опциональный header X-BMS-DOMEN доступен только здесь и на других TokenAuth runtime endpoints. Он нормализуется до домена, резолвится через on-prem mapping и при отсутствии/неизвестном домене дает fallback в default-source.

Логика доступности

  • BMS берется из токена текущего пользователя.
  • source_key выбирается RoutingDataSourceFilter из routed source по X-BMS-DOMEN или из default-source, если домен не передан/не найден.
  • Целевая роль определяется параметром roleId; роль должна существовать в bms_roles для текущего BMS.
  • Для role-based ACL используется metabase_widget_access по ключу:
  • source_key (routing source),
  • bms_id,
  • role_id.
  • available=true, если widgetId есть в разрешенном списке.
  • Удаленные/архивные виджеты не попадают в матрицу.
  • Для targetType=CATEGORY обновляются все дочерние виджеты категории.

Коды ошибок

  • 400 — невалидный запрос или цель отсутствует в текущем scope.
  • 401 — пользователь не аутентифицирован.
  • 403 — доступ запрещен security-политикой.
  • 502 — ошибка интеграции с Metabase.
  • 500 — внутренняя ошибка.