Інтеграція 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
    1362
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1253
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    958
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1190
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    932
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    949

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

Як налаштувати веб-аналітику: GA4, GTM, Яндекс.Метрика та Amplitude

Ми часто бачимо: конверсія 1.2 %, трафік зростає, а конверсія стоїть. Маркетолог дивиться в Google Analytics і каже: «користувачі йдуть з кроку 2 оформлення замовлення». Розробник відкриває той самий крок — помилок немає, в Sentry тиша. Значить, справа не в JS-базі, а в UX або в кривих даних, які показує аналітика. Аналітика ламається непомітно: подія перестала трекатися після редеплою — ніхто не помітив; GTM-тег стріляє двічі — дані задвоїлися; фільтр GA4 виключає бота, який насправді — реальний трафік з корпоративного проксі. Замовте аудит поточних тегів — ми знайдемо причину за тиждень. Ми маємо понад 5 років досвіду в налаштуванні веб-аналітики для 100+ проєктів — гарантуємо прозорість та достовірність даних.

Після правильного налаштування економія рекламного бюджету може досягати значної суми щомісяця — це реальний кейс інтернет-магазину з 50 000 сесій на день, де дедуплікація purchase повернула 20 % невірно приписаних конверсій.

Чому події GA4 дублюються і як це виправити?

Universal Analytics закрито, його місце зайняла подієва модель GA4. У ній немає фіксованих хітів сторінок і транзакцій — лише події з параметрами. Це гнучкіше, але вимагає правильного дизайну подій.

Автоматичні події GA4 збирає сам: page_view, scroll, click, session_start. Рекомендовані події потрібно реалізувати самостійно: purchase, add_to_cart, begin_checkout, view_item. Google очікує конкретну схему параметрів — якщо передати product_id замість item_id, дані потрапляють в GA4, але не в стандартні звіти e-commerce. Кастомні події для специфіки проєкту: filter_applied, video_progress, form_step_completed. Кастомні параметри необхідно зареєструвати в GA4 Admin → Custom definitions, інакше вони не будуть доступні у звітах.

Часта помилка — подія purchase з дублями. Причина: тег спрацьовує на сторінці /thank-you, користувач оновлює сторінку — другий purchase іде в GA4. Рішення: на бекенді генеруємо унікальний transaction_id і передаємо в подію. GA4 de-duplicates по ньому — перевіряйте через DebugView. Правильна атрибуція економить до 20 % рекламного бюджету, який раніше йшов на невірно приписані конверсії.

Як налаштувати data layer, щоб не втратити дані?

GTM — інструмент для керування тегами без деплою коду. Але «без коду» не означає «без архітектури». Data Layer — основа всього. Передаємо дані з застосунку в GTM через dataLayer.push(). Структура: event + контекстні дані. Для e-commerce: перед відкриттям сторінки продукту — push з даними товару. GTM-тег читає з dataLayer, не з DOM.

window.dataLayer = window.dataLayer || [];
dataLayer.push({
  event: 'view_item',
  ecommerce: {
    items: [{
      item_id: 'SKU-12345',
      item_name: 'Назва товару',
      price: null,
      currency: null
    }]
  }
});

Погана практика: GTM-тег парсить DOM — шукає ціну в span.price, назву в h1. Це ламається при будь-якій зміні верстки. Хороша практика: завжди dataLayer. Використовуємо Preview Mode для налагодження та GTM Server-Side для чутливих даних — відправка з сервера, не з браузера, обходить блокувальники реклами, не втрачає дані. Server-side підхід у 2-3 рази надійніший за client-side за показником втрати подій через розширення браузера.

Як Яндекс.Метрика доповнює веб-аналітику?

Для російської аудиторії Метрика обов'язкова — особливо Вебвізор. Запис сесії користувача, який кинув кошик, часто дає відповідь швидше, ніж тиждень аналізу воронки. Цілі в Метриці: подієві (через ym(COUNTER_ID, 'reachGoal', 'GOAL_NAME')) або автоматичні (клік по кнопці, відвідування сторінки). Зв'язка з CRM через Метрика Плюс — передача офлайн-конверсій. Наш досвід: у 8 з 10 проєктів після налаштування Метрики знаходили приховані баги в UX, які не показували інші системи.

Що дає product analytics в Amplitude?

Amplitude — продуктовий інструмент, на відміну від маркетингових GA4 та Метрики. Він заточений під аналіз поведінки користувачів всередині продукту: воронки, ретеншн, user paths. Amplitude підходить для SaaS-продуктів, мобільних застосунків та будь-яких сервісів із зареєстрованими користувачами, де важливо зрозуміти, як проходять онбординг, на якому кроці йдуть, які фічі використовують частіше. Ключові концепції: identify (пов'язати анонімного користувача з userId після авторизації), group (акаунт у B2B SaaS), когорти для утримання. Amplitude Chart — воронка кроків за останні 30 днів з розбивкою за джерелом.

Моніторинг якості даних

Аналітика без моніторингу — чорна скринька. Налаштовуємо:

  • GA4 Realtime — перевіряємо після кожного деплою, що ключові події приходять
  • Alerting в GA4 — аномалія в кількості подій purchase (різке падіння = щось зламалося)
  • GTM Preview в staging-оточенні перед продакшеном
  • Ручні тести воронок раз на тиждень — просто пройти шлях покупця і перевірити, що все трекається

Якщо ви помітили розбіжності в даних — зв'яжіться, проведемо безкоштовний аудит коректності тегів.

Що перевіряємо після кожного деплою

  • Чи всі рекомендовані події присутні в DebugView
  • Чи немає задвоєнь (рахуємо кількість purchase на 100 сесій)
  • Чи не змінилася структура dataLayer після оновлення фронтенду

Що входить в роботу

Компонент Опис
Аудит поточних тегів Перевірка існуючих GTM-тегів, dataLayer, дублів та помилок
Дизайн подієвої схеми Документація: список подій, параметри, тригери
Налаштування GA4 + GTM Створення конфігурації, тегів, Custom definitions
Яндекс.Метрика Встановлення лічильника, створення цілей, налаштування Вебвізора
Amplitude (опціонально) Налаштування клієнтського та серверного SDK, когорти
QA та моніторинг Тестування в Preview Mode, Alerting
Навчання та передача Доступи, інструкція з додавання нових подій, консоль

Процес та терміни

  1. Аудит поточних тегів та даних (2 дні)
  2. Дизайн подієвої схеми (2 дні)
  3. Розробка Data Layer та налаштування тегів (3–5 днів)
  4. QA в Preview Mode та на staging (2 дні)
  5. Деплой та налаштування дашбордів (1 день)
Сценарій Термін
Базове налаштування GA4 + GTM 1 тиждень
Повний e-commerce tracking + Метрика 2–3 тижні
Server-side GTM + Amplitude 3–5 тижнів

Вартість розраховується індивідуально. Отримайте консультацію з налаштування веб-аналітики для вашого проєкту — ми оцінимо обсяг робіт за один день. Зв'яжіться з нами, щоб почати. Для точного розрахунку вартості залиште заявку — ми проаналізуємо ваш стек за 1 день.