Dashboards & allowlists

Dashboards & allowlists

Dashboards & allowlists

Workstation: Dashboards → Register dashboards (+ runtime builder)


Overview

  1. Build and publish dashboard in analytics runtime (operator builder)
  2. Enable embed in runtime; set Allowed Domains
  3. Register dashboard on control plane; set iframe parent origins

Skip any step → embed forbidden, blank iframe, or wrong tenant data.


Build in runtime builder

Open Dashboard builder in the Operator console sidebar (SSO, operator-only).

RuleWhy
Every chart dataset includes tenant columnRLS at session mint
Do not hard-code WHERE tenant = 'x' in SQLIsolation is per-session
Prefer single-page dashboardsCleaner embed
Publish before embed enableDrafts not embeddable

White-label: No tabs/SQL Lab for end-users — guest role restricts builder features. WHITE_LABEL_EMBED.md


Enable embed in runtime

  1. Dashboard → ⋮ → Embed dashboard
  2. Enable embed; copy embedded dashboard UUID
  3. Allowed Domains — add every origin that loads embeds:
https://app.yourcompany.com
http://localhost:3000
https://embeddedcanvas.com

Exact match: scheme + host + port, no trailing slash.


Register on control plane

Dashboards workstation → Register dashboards

FieldValue
Superset embed UUIDFrom embed modal
Display nameShown in registry / portal
packKeyOptional stable id for integrator
Iframe parent originsSame origins as Allowed Domains

Copy embed token (UUID) for engineering handoff.


Dual allowlist (required)

#WhereControls
1Dashboards → Iframe parent originsHosted shell frame-ancestors
2Runtime → Embed → Allowed DomainsDirect runtime iframe (SDK path)

Both lists must match your app staging + production origins.

Negative test: load from unlisted origin → blocked .


RLS proof (before handoff)

Analytics → view-as tenant A, then B — metrics must differ.

Or Embed portal (/portal) RLS test buttons.

Same tenant twice → identical data. Empty chart for a tenant with no rows is OK; same data as another tenant is not.


Guest permissions

If embed returns Forbidden after allowlist fix, operator runs inside workspace container:

python3 /app/pythonpath/grant-guest-embed-perms.py

Playbook: fix-superset-embed-forbidden.md


Optional (P1)

FeatureWhere
Custom embed domainAnalytics advanced → DNS + allowlist update
Tenant catalogRestrict dashboards per tenant at session mint
Dashboard pack importAnalytics advanced / GitOps

Deep reference