Metabase Settings Controller¶
Контроллер: tech.ujin.api.MetabaseSettingsController
Swagger Links¶
- Swagger UI
- OpenAPI YAML
- GET /api/metabase/settings/widgets/access
- PATCH /api/metabase/settings/widgets/access
Эндпоинты¶
- 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доступен только здесь и на другихTokenAuthruntime 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— внутренняя ошибка.