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

Коли кожен відділ потребує власної аналітики, а дані суворо розмежовані, стандартні BI-інструменти не справляються. Ми розробляємо інтеграцію Apache Superset з вашим застосунком через Guest Token та Row Level Security, щоб співробітники бачили лише свої метрики. Наша команда реалізує проєкт під ключ — від налаштування до супроводу, забезпечуючи надійне та масштабоване рішення.

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

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

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

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

Вбудовування 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 із готовим модулем безпеки та отримайте консультацію з інтеграції з будь-яким фреймворком.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060