Zum Inhalt springen
Alle Artikel
4 Min. Lesezeit

Dein Workspace ist eine Sicherheitsgrenze.

Warum Besitzprüfungen zu jedem Lesen und Schreiben gehören — und warum eine Task-URL niemals Zugang gewähren darf.

das supastack-Team

Besitz serverseitig ableiten

Eine Datensatz-ID identifiziert etwas; sie beweist nicht, wer es lesen darf. supastack begrenzt Nutzerdatensätze über workspaceId. Der Server löst den Workspace des authentifizierten Nutzers auf und nimmt diese Grenze auf, wenn ein Datensatz gelesen oder geändert wird.

Behandle eine vom Browser gesendete Workspace-ID nicht als Besitznachweis. Der Browser kann eine Aktion anfragen, aber der vertrauenswürdige Server-Kontext muss feststellen, wessen Aktion es ist. Diese Regel muss für Task-Status, gespeicherte Anbieter-Konfiguration, Nutzungsdatensätze und jede produkteigene Ressource gelten. Layouts und Komponenten können filtern, was rendert, aber Rendern ist keine Autorisierung — die Prüfung gehört dorthin, wo der Datensatz tatsächlich gelesen oder geschrieben wird.

Alles Weitere in diesem Post folgt aus dieser Regel: Besitz wird abgeleitet, niemals übergeben. In dem Moment, in dem ein vom Client gesendetes workspaceId irgendwo vertraut wird, wird jede andere Prüfung zur Dekoration. Der Authentifizierungs-Post behandelt, wie die Session selbst vor dieser Grenze hergestellt wird.

Mitgliedschaft ist Teil der Grenze

Scoping beantwortet, zu welchem Workspace ein Datensatz gehört; Mitgliedschaft beantwortet, ob dieser Nutzer zu jenem Workspace gehört. Löse beides serverseitig auf. supastack modelliert persönliche und Organisations-Workspaces mit Besitzer-, Admin- und Mitgliederrollen — der Workspaces-Guide dokumentiert das Modell.

Rollen fügen eine zweite Achse hinzu: Ein Mitglied darf lesen, was nur ein Admin ändern darf. Halte die beiden Prüfungen getrennt — „gehört zu diesem Workspace“ und „darf diese Aktion ausführen“ —, damit eine Herabstufung oder Entfernung an derselben Grenze greift wie alles andere. Einladungen und Entfernungen sind Teil desselben Lifecycles, kein nachträglicher Admin-Gedanke.

Mitgliedschaftsänderungen müssen außerdem sofort greifen. Die nächste Anfrage eines entfernten Mitglieds sollte an der Grenze scheitern, nicht erst, wenn ein gecachtes Token zufällig abläuft — ein weiterer Grund, warum die Prüfung dort lebt, wo Datensätze gelesen werden, und nicht in einem früher ausgestellten Credential.

Die Anfragen testen, die fehlschlagen müssen

Ein Test, der einen Besitzer einen Datensatz abrufen lässt, beweist den Happy Path. Er beweist keine Isolation. Kombiniere ihn mit einem zweiten Workspace, der denselben Datensatz anfragt, einer anonymen Anfrage und einer Schreiboperation, die versucht, einen anderen Besitzer zu unterschieben.

Prüfe das externe Verhalten ebenso wie das persistierte Ergebnis. Eine abgelehnte Anfrage darf die Daten eines anderen Workspaces nicht verändern, und eine Fehlerantwort darf weder Geheimnisse noch rohe Datenbankdetails preisgeben. Diese Prüfungen halten die Grenze reviewbar, wenn sich die Implementierung ändert.

  • Ein zweiter Workspace fragt dieselbe Datensatz-ID an — abgelehnt.
  • Eine anonyme Anfrage trifft denselben Endpoint — abgelehnt.
  • Ein aus dem Workspace entferntes Mitglied versucht es erneut — abgelehnt.
  • Ein Write nennt einen anderen Besitzer oder Workspace — abgelehnt, ohne dass etwas verändert wird.
  • Fehlerantworten bleiben generisch — keine Geheimnisse, keine Schema-Details.

Die Regel in dein Produkt tragen

Wenn du eine neue Produkt-Tabelle hinzufügst, entscheide ihren Besitz, bevor du den Screen baust. Nimm workspaceId in ihr Persistenzmodell auf, löse den Workspace über die bestehende Server-Grenze auf und nutze diesen Kontext in Listen- wie Detailoperationen.

Hintergrund-Worker verlangen dieselbe Sorgfalt. Ein eingereihter Task muss genug vertrauenswürdigen Kontext tragen, um den richtigen Datensatz zu laden, während Anbieter-Zugangsdaten auf dem Server bleiben. Auch ein geplanter Job, der Zeilen anhand nackter IDs lädt, liegt innerhalb der Grenze. Eine konsistente Besitzregel ist leichter zu warten als eine Sammlung routenspezifischer Ausnahmen.

Die API-Oberfläche gehört zur selben Grenze. Workspace-API-Schlüssel und signierte ausgehende Webhooks tragen den Scope ihres Workspaces mit sich — ein Schlüssel darf nie zu einem Weg werden, mandantenübergreifend zu lesen, und ein Webhook-Payload darf nie die Datensätze eines Nachbarn tragen. Der API-Modul-Guide beschreibt die Form dieser Oberfläche.

Häufige Fragen zur Workspace-Isolation

Multi-Tenant-Isolation wirft in jedem Projekt dieselbe Handvoll Fragen auf. Diese hier lohnt es sich früh zu klären.

  • Reicht Scoping auf Anwendungsebene, oder brauche ich Row-Level Security? — Serverseitig erzwungenes Scoping bei jedem Lesen und Schreiben deckt das Bedrohungsmodell der meisten SaaS ab. Datenbank-RLS fügt Tiefenverteidigung hinzu, ersetzt aber keine Grenzprüfungen — Worker und API-Schlüssel brauchen weiterhin dieselbe Regel.
  • Wie sollte Teilen über Workspaces hinweg funktionieren? — Modelliere es explizit — eine Einladung, ein Mitgliedschaftsdatensatz —, statt den Scope aufzuweichen. „Jeder mit dem Link“ sollte ein gestaltetes Feature mit eigenen Prüfungen sein, kein Unfall.
  • Was bricht in Multi-Tenant-Apps zuerst? — Bequemlichkeitspfade: Wiederherstellungs-Links, Admin-Tooling, Hintergrund-Worker, die Datensätze anhand nackter IDs laden. Auditiere jeden Codepfad, der einen Datensatz berührt, ohne den normalen Scope zu durchlaufen.
  • Wie füge ich einer bestehenden Tabelle Scoping hinzu? — Ergänze workspaceId, fülle die Werte nach, setze es in Reads und Writes durch und fass danach das UI an. Liefere die negativen Tests zuerst, damit die Grenze bewiesen statt angenommen ist.
  • Brauchen Server-Actions Prüfungen, wenn die Seite geschützt ist? — Ja. Page-Guards verstecken Screens; sie autorisieren keine Operationen. Jede Action löst Session und Workspace unabhängig auf.

Häufige Fragen

14 Fragen

Was ist supastack?

supastack ist eine modulare Basis zum Bauen von KI-gestützten SaaS-Produkten. Sie bündelt die gemeinsame Infrastruktur, damit du dich auf die Funktionen konzentrieren kannst, die dein Produkt ausmachen.

Unterstützt es Web und Mobil?

Ja. supastack enthält Next.js- und Expo-Apps als Ausgangspunkt für Web- und Mobile-Erlebnisse.

Welche Authentifizierung ist enthalten?

Better Auth deckt E-Mail/Passwort, OTP und Social Login ab. Persönliche Workspaces werden mit dem Konto provisioniert, damit Datensätze vom ersten Tag an begrenzt sind.

Wie wird KI unterstützt?

supastack enthält konfigurierbare Multi-Anbieter-KI, Nutzungsverfolgung, Budgets und verschlüsselte Bring-your-own-key-Unterstützung.

Wie werden Abonnements gehandhabt?

Für Produkte, die auf dem Kit aufbauen, bilden Stripe-Abrechnung, Abonnements und Berechtigungen die Basis für bezahlten Zugang. Anbieter-Geheimnisse bleiben serverseitig.

Wo liegt mein produktspezifischer Code?

Produktspezifische Funktionen bleiben in einem separaten Codebase, während das Produkt die Basismodule von supastack konfiguriert und integriert.

Wie funktioniert die Preisgestaltung von supastack?

Das Kit ist ein Einmalkauf mit lebenslangen Updates: Ein Framework für 249 $ (befristeter Einführungspreis — 100 $ Rabatt auf den regulären Preis von 349 $) oder Alle Frameworks (Next.js, iOS, Android) für 499 $ (befristeter Einführungspreis — 100 $ Rabatt auf den regulären Preis von 599 $), plus 75 $ pro zusätzlichem Entwickler-Sitz. Kein Kit-Abo. Checkout auf dieser Website liefert deinen Lizenzschlüssel per E-Mail, mit Repo-Zugang per GitHub-Einladung.

Wie begrenzen Workspaces meine Daten?

Nutzerdatensätze sind über workspaceId begrenzt. Identität, Berechtigungen, KI-Nutzung, Abrechnungsereignisse und Audit-Einträge bleiben innerhalb der persönlichen Workspace-Grenze.

Wie funktionieren Hintergrundjobs?

Trigger.dev ist die explizite Job-Laufzeit. Der JobRunner-Vertrag verspricht nur enqueue, status und cancel — Workflow-Semantik bleibt Trigger.dev-spezifisch und explizit.

Wie unterscheidet sich E-Mail von Outreach?

Transaktions-E-Mail deckt Produktabläufe wie Task-Abschluss-Hinweise ab. Cold Outreach und Kampagnen gehören zum Produkt selbst, außerhalb des E-Mail-Moduls dieses Kits.

Wie funktionieren mobile Käufe?

Mobile bietet native Käufe und Wiederherstellung über RevenueCat; dein Server prüft den Zugriff. Konfiguriere die Store-Konten und schließe Gerätetests vor der Veröffentlichung ab. Web-Abrechnung bleibt separat.

Wo liegen die KI-Anbieter-Schlüssel?

BYOK-Zugangsdaten sind verschlüsselt und bleiben serverseitig. Schlüssel werden in Logs bereinigt; Nutzung und Budgets bleiben auf Workspace-Ebene sichtbar.

Welche Zahlungsmethoden akzeptiert der Checkout?

Der von Stripe gehostete Checkout akzeptiert Karten und kann — sobald die Wallets im Stripe-Konto aktiviert sind — auch Alipay und WeChat Pay anbieten, praktisch für Käufer in China. Wallet-Autorisierungen werden asynchron bestätigt, sodass sich die Lizenzseite aktualisiert, sobald die Zahlung eingegangen ist.

Kann ich eine Rückerstattung erhalten?

Sobald du Zugriff auf das Repository hast, gehört supastack für immer dir und kann daher nicht zurückerstattet werden. Aber keine Sorge: Du erhältst den vollständigen Quellcode mit lebenslangen Updates, um unbegrenzt viele Produkte für dich oder deine Kunden zu erstellen und zu veröffentlichen. Du darfst den Code lediglich nicht weiterverkaufen oder das Repository als Starter-Kit oder Vorlage weitergeben.

DE