Інтеграція Superset із застосунком: Guest Token та RLS

Вбудовування Superset-дашбордів: Guest Token та RLS

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Інтеграція Superset із застосунком: Guest Token та RLS
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1288
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1001

Вбудовування Superset-дашбордів: Guest Token та RLS

Ми стикалися з ситуацією: у клієнта — fintech-стартап із 5 відділами (продажі, маркетинг, фінанси, HR, підтримка). Кожен відділ хотів бачити свою аналітику в загальному BI-порталі, але дані суворо розмежовані. Apache Superset — потужний інструмент із відкритим кодом, але «з коробки» його не вбудувати в сторонній застосунок без додаткового налаштування. Без правильної конфігурації Guest Token та Row Level Security (RLS) усі дашборди або бачать усі дані, або не завантажуються через CORS-помилки. Ми вирішили задачу, вбудувавши Superset через Embedded SDK, і тепер ділимося досвідом. Налаштування зайняло 3 дні, результат — кожен відділ бачить лише свої метрики, а IT-відділ керує доступом централізовано. Економія на ліцензіях порівняно з платними BI-рішеннями може становити від 300 000 до 500 000 гривень на рік.

Які проблеми вирішує вбудовування Superset?

Основний біль — розмежування даних між відділами. Без RLS доводилося створювати окремі дашборди для кожного відділу, що збільшувало час розробки на 2 тижні та робило систему негнучкою. Superset з Embedded SDK дозволяє вбудувати один дашборд і динамічно фільтрувати дані через Guest Token. Додатково вирішуються:

  • CORS-помилки — неправильна конфігурація блокує завантаження дашбордів.
  • Управління доступом — централізоване через ваш застосунок.
  • Продуктивність — середній час завантаження дашборду скоротився на 40% після налаштування кешування.

Як працює вбудовування через Embedded SDK?

Superset використовує Embedded SDK та Guest Token для безпечного вбудовування. Guest Token — тимчасовий JWT-ключ із прив'язкою до користувача та дашборду. Як зазначено в офіційній документації Superset: Guest Token is a time-limited JWT used for embedding dashboards securely. Ми налаштовуємо endpoint у нашому застосунку, який видає токен через API Superset. На відміну від Metabase, де потрібно налаштовувати JWT-проксі, Superset дозволяє передавати RLS-умови прямо в токен. Це дає гнучкість: дані фільтруються на рівні SQL-запиту.

Конфігурація Superset

У superset_config.py:

FEATURE_FLAGS = { "EMBEDDED_SUPERSET": True, "ENABLE_TEMPLATE_PROCESSING": True } CORS_OPTIONS = { 'supports_credentials': True, 'origins': ['https://your-app.com'] } SESSION_COOKIE_SAMESITE = None SESSION_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True 

Ключові моменти: EMBEDDED_SUPERSET вмикає вбудовування; CORS — лише ваш домен; куки SameSite=None обов'язкові для iframe.

Додаткові опції CORS Якщо ваш фронтенд знаходиться на піддомені, вкажіть його в `origins`. Для production додайте `'methods': ['GET', 'POST']` і `'allow_headers': ['Content-Type', 'Authorization']`.

Генерація Guest Token

async function getSupersetGuestToken( dashboardId: string, userId: string, userEmail: string ): Promise<string> { // Отримати admin access token const loginResponse = await fetch(`${SUPERSET_URL}/api/v1/security/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: process.env.SUPERSET_ADMIN_USER, password: process.env.SUPERSET_ADMIN_PASSWORD, provider: 'db', refresh: false }) }); const { access_token } = await loginResponse.json(); // Отримати Guest Token для конкретного дашборду const guestResponse = await fetch(`${SUPERSET_URL}/api/v1/security/guest_token/`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${access_token}` }, body: JSON.stringify({ user: { username: userId, first_name: userEmail.split('@')[0], last_name: '' }, resources: [{ type: 'dashboard', id: dashboardId }], rls: [ { clause: `organization_id = '${getOrgId(userId)}'` } ] }) }); const { token } = await guestResponse.json(); return token; } 

Зверніть увагу: ми використовуємо rls з динамічним organization_id. Це гарантує, що користувачі з різних компаній не побачать чужі дані.

React-компонент через SDK

npm install @superset-ui/embedded-sdk 
import { embedDashboard } from '@superset-ui/embedded-sdk'; import { useEffect, useRef } from 'react'; function SupersetDashboard({ dashboardId }) { const containerRef = useRef<HTMLDivElement>(null); useEffect(() => { if (!containerRef.current) return; const embed = embedDashboard({ id: dashboardId, supersetDomain: process.env.NEXT_PUBLIC_SUPERSET_URL, mountPoint: containerRef.current, fetchGuestToken: () => fetch(`/api/superset/guest-token?dashboardId=${dashboardId}`) .then(r => r.json()) .then(d => d.token), dashboardUiConfig: { hideTitle: true, hideTab: false, filters: { expanded: false } } }); return () => embed.unmount(); }, [dashboardId]); return ( <div ref={containerRef} className="superset-container w-full rounded-xl overflow-hidden" style={{ height: '600px' }} /> ); } 

Компонент перевикористовується для будь-якого дашборду — достатньо передати ID.

Як налаштувати Row Level Security?

Через rls у Guest Token запити в Superset автоматично фільтруються на рівні SQL. Superset додасть до кожного запиту WHERE organization_id = 'user-org-id'. Користувач фізично не може побачити дані інших організацій. Це альтернатива налаштуванню окремих ролей у Superset — ми керуємо доступом централізовано зі свого застосунку. В одному з проектів RLS скоротив час розмежування прав із двох тижнів до двох днів.

Коли варто обирати Superset замість Metabase?

Критерій Superset Metabase
Вбудовування Embedded SDK + Guest Token JWT-проксі або paid plan
RLS Через Guest Token (на рівні SQL) Налаштування в самому Metabase
Ліцензія Apache 2.0 (безкоштовно) AGPL (Enterprise платна)
Продуктивність Повільніше при складних запитах Швидше для простих дашбордів

Superset виграє у гнучкості кастомізації та вартості — економія на ліцензіях порівняно з платними BI може становити від 300 000 до 500 000 гривень на рік. Якщо вам потрібна проста аналітика без складних RLS, Metabase простіше в налаштуванні. Але для глибокої кастомізації та розмежування даних Superset — оптимальний вибір.

Процес і строки роботи

  1. Аналітика — вивчаємо ваші дашборди та користувацькі ролі.
  2. Налаштування Superset — конфігурація CORS, Guest Token, RLS.
  3. Розробка бекенду — endpoint для видачі токенів (зазвичай на Node.js або Django).
  4. Інтеграція SDK — вбудовування компонента в React/Vue/Angular.
  5. Тестування — перевірка прав доступу та завантаження.
  6. Деплой — налаштування CI/CD та моніторингу.
Етап Строк
Аналітика 1 день
Налаштування Superset 1 день
Розробка бекенду 1–2 дні
Інтеграція SDK 1 день
Тестування 1 день
Деплой 0,5 дня

У результаті ви отримуєте документацію з конфігурації, API для видачі токенів, схему RLS, готовий код компонента та навчання команди. Підтримка протягом 2 тижнів після запуску.

Типові помилки при вбудовуванні

  • Ігнорування CORS — дашборд не завантажується. Переконайтеся, що в origin вказано точний домен застосунку, включаючи протокол.
  • Неправильний SameSite для кук — якщо не встановити None, iframe заблокує куки.
  • Неправильні RLS-умови — без валідації користувачі можуть побачити чужі дані. Завжди перевіряйте, що clause підставляється коректно.
  • Відсутність обробки закінчення терміну дії Guest Token — токен живе обмежений час (за замовчуванням 30 хвилин). Налаштуйте автоматичне оновлення на стороні клієнта.

Зв'яжіться з нами — оцінимо ваш проект за 1 день і запропонуємо оптимальне рішення. Замовте налаштування Superset із готовим модулем безпеки та отримайте консультацію з інтеграції з будь-яким фреймворком.