Zum Inhalt springen

Eine App einbetten

Eine App wird genauso eingebettet wie eine gespeicherte Abfrage oder ein Dashboard — über die <saiku-embed>-Web-Komponente — aber als eine token-scoped Einheit. Ein einzelnes Token gewährt die gesamte App: ihre Navigation und alle ihre Seiten reiten auf dieser einen Gewährung, und der Gast browst sie read-only und wechselt die Seiten an Ort und Stelle.

Das Markup

Setzen Sie kind="app" und richten Sie path auf das .saikuapp-Dokument:

<saiku-embed
server="https://YOUR-WORKSPACE.saiku.bi"
token="tx-..."
kind="app"
path="homes/admin/sales-portal.saikuapp"
height="800px"
></saiku-embed>

Alles andere an der Komponente — Installationsmethoden, Events, Theming über --saiku-embed-*-Variablen, die React- und Vue-Wrapper — funktioniert genau so, wie es auf der Seite Saiku einbetten dokumentiert ist. Ein App-Embed ist rein präsentational über dem bestehenden Embed-Query-Pfad; es fügt auf der Host-Seite keine neue Mechanik hinzu.

Ein App-Token ausstellen

Stellen Sie ein App-Token wie ein Dashboard-Token aus, aber mit resourceKind: "app" und einem .saikuapp-Pfad:

Terminal-Fenster
curl -X POST 'https://YOUR-WORKSPACE.saiku.bi/rest/saiku/api/embed/tokens' \
-u admin:admin \
-H 'Content-Type: application/json' \
-d '{
"resourceKind": "app",
"resourcePath": "homes/admin/sales-portal.saikuapp",
"ttlHours": 72,
"label": "Customer sales portal"
}'

Wer ausstellt, muss Lesezugriff auf die App haben. Das Token pinnt genau eine App: Wird es gegen irgendeine andere Ressource wiederverwendet, kommt dasselbe undurchsichtige EMBED_INVALID zurück — ein Token für App A kann weder App B noch irgendeinen anderen Repository-Pfad lesen.

Sicherheit: RLS und PII werden serverseitig durchgesetzt

Die Tiles jeder Seite führen dieselbe abgesicherte Pro-Tile-Abfrage aus, die auch ein Dashboard-Embed nutzt. Der Abfragerumpf wird serverseitig aus dem gepinnten App-Dokument gezogen — nie vom Client — also:

  • Row-Level-Security-Filter, die das Token trägt, werden zuletzt angewendet und fail closed: Können sie nicht in die Abfrage eines Tiles eingefügt werden, wirft das Tile einen Fehler, statt ungefilterte Zeilen zu leaken.
  • PII-Redaction bleibt an: Ist irgendeine referenzierte Spalte PII-annotiert, wird das Token beim Ausstellen auf erzwungene Redaction hochgestuft, genau wie bei einem Dashboard. Der Inspector löst jede referenzierte Hierarchie und Measure gegen die saiku.semantic.pii-Annotationen des Cubes auf und fail closed — kann er die Ressource überhaupt nicht auflösen, verweigert er die Gewährung, statt anzunehmen, die Ressource sei sauber. Die Audit-Zeile unterscheidet die beiden Fälle („annotated columns” vs. „unresolvable resource”), sodass sich eine verweigerte Gewährung diagnostizieren lässt.
  • Ein clientseitiges filter-Override kann die Abfrage eines Tiles nur verengen, nie erweitern.

Plugin-Tiles in einer eingebetteten App

Enthält eine App-Seite ein Plugin-Tile, wird das Plugin token-scoped ausgeliefert: Der Gast kann genau die Plugins laden, die die eingebettete App referenziert, und sonst nichts. Dieselbe Sandbox und CSP-Eindämmung gelten innerhalb des Embeds.

Verwandt

  • Saiku einbetten — die vollständige <saiku-embed>-Referenz: Tokens, Events, Theming, öffentliche Gewährungen, React / Vue.
  • App-Builder-Überblick — die App bauen, die Sie einbetten.
  • Plugins — das Eindämmungsmodell für Tiles mit sandboxed JS.