Multi‑Tenant‑SaaS‑Berechtigungen verständlich erklärt mit einfachen Regeln zu Organisation, Teams, Rollen und Besitz sowie Checklisten und Beispielen, die sicher skalieren.

Berechtigungsprobleme fangen meist als kleine Ärgernisse an. Ein Ticket kommt rein: „Ich bin Admin, sehe aber die Rechnungen nicht.“ Ein anderes: „Warum kann mein Kollege Einstellungen bearbeiten?“ Leute klicken herum, raten und teilen manchmal einen einzigen "Owner"-Login, weil das schneller erscheint, als den Zugriff sauber zu regeln.
Dann häufen sich Workarounds. Teams erfinden Rollen wie "Admin 2" oder "Manager (no delete)". Entwickler fügen einmalige Prüfungen hinzu wie "wenn Nutzer in Sales ist, Export erlauben", weil das den heutigen Bug behebt. Einen Monat später kann niemand mehr sagen, welche Regeln Absicht sind und welche Unfälle.
Es wird schlimmer, sobald du mehr Kunden hinzufügst. Eine Regel, die für einen Account ok wirkte ("Admins sehen alle Daten"), bricht, wenn du hunderte Orgs mit unterschiedlichen Erwartungen hast. Ein Kunde will strikte Trennung zwischen Abteilungen. Ein anderer möchte einen gemeinsamen Workspace. Manche brauchen, dass ein Externer nur an einem Projekt arbeiten kann. Wenn dein Modell nicht klar ist, wird jeder neue Kunde zur Ausnahme.
Das Ziel ist simpel: vorhersagbare Zugriffsregeln, die du in einer Minute erklären kannst. Zum Beispiel: „Eure Organisation besitzt die Daten. Teams gruppieren Personen. Rollen definieren Aktionen. Ressourcen gehören zu einer Org und manchmal zu einem Team. Teilen folgt ein paar Standardregeln.“ Wenn du das nicht einfach sagen kannst, wird es schwer zu bauen, zu testen und zu ändern.
Ein lohnendes Versprechen: weniger Rollen, klarerer Besitz, sichere Defaults. Starte mit wenigen Rollen, die echten Aufgaben entsprechen, mache Besitz für jede Ressource offensichtlich und setze die Voreinstellung auf minimalen Zugriff. Erlaube Teilen bewusst, nicht versehentlich.
Wenn deine App mehrere Kunden bedient, ordne zuerst das gedankliche Modell, bevor du Regeln schreibst. Die meiste Verwirrung bei Multi‑Tenant‑SaaS-Berechtigungen kommt von schwankenden Definitionen, bei denen dasselbe Wort in verschiedenen Produktteilen Verschiedenes bedeutet.
Wähle eine Bedeutung für die Tenant-Grenze und bleibe dabei. Viele Produkte nutzen „Organization“ als Tenant: alle Daten leben innerhalb einer Org, und nichts überschreitet diese Grenze, außer du baust explizites Teilen.
Ein einfaches Vokabular, das beim Wachsen klar bleibt:
"Eine Person, viele Orgs" ist normal. Ein Berater kann zu drei Kunden‑Orgs gehören, jeweils mit anderer Rolle. Darum müssen "User" und "Membership" getrennt sein. Prüfungen beziehen sich meist auf die Membership, nicht auf den User.
Teams helfen, wenn sie reale Gruppierungen wie „Support“ oder „Finance“ widerspiegeln. Sie stören, wenn sie zum zweiten Berechtigungssystem werden. Ein einfacher Test: Kannst du das Team in einem Satz erklären, ohne eine Feature-Regel zu nennen?
Beispiel: Maria meldet sich einmal an und wechselt dann zwischen Org A und Org B. In Org A ist sie im Finance-Team und kann Rechnungen einsehen. In Org B ist sie Viewer und darf nur Projekte lesen. Gleicher Nutzer, unterschiedliche Memberships, konsistente Ressourcentypen, klare Grenzen.
Multi‑Tenant‑SaaS-Berechtigungen bleiben verständlich, wenn du drei Dinge trennst:
RBAC (role-based access control) heißt: Du gibst einem Nutzer eine Rolle, und diese Rolle gewährt Aktionen. Rollennamen sollten Verantwortung beschreiben, nicht Status. „Billing Admin“ ist klar. „Power User" führt meist zu Diskussionen.
Behandle Berechtigungen wie Verben und halte sie im Produkt konsistent:
Füge dann den Scope hinzu, damit dasselbe Verb an verschiedenen Orten gilt. So vermeidest du 20 leicht unterschiedliche Rollen.
Gängige, leicht lesbare Scopes:
Wenn du dabei bist, Rollen wie "Project Editor" und "Project Editor (Own)" zu schaffen, ist das meist ein Scope‑Problem, nicht ein Rollen‑Problem.
Beispiel: In einem CRM darf der „Sales Rep“ Deals erstellen und bearbeiten, aber beschränke das auf „eigene Objekte“. Der „Sales Manager“ behält ähnliche Verben mit „team‑only“ oder „org‑wide“ Scope. Du bekommst weniger Rollen, klarere Regeln und weniger Überraschungen, wenn jemand das Team wechselt.
Eine solide Default‑Regel: Rollen gewähren Verben, und Besitz (oder Assignment) begrenzt, wo diese Verben wirken.
Wenn dein Modell für einen Kunden funktioniert, aber bei zehn bricht, hast du vermutlich "wer kann sehen" mit "wer kann tun" und "wer besitzt" vermischt. Trenne diese und das System bleibt vorhersehbar.
Ein Regelset, das skaliert:
Beispiel: Sam gehört zu Org A und Org B. In Org A ist Sam Member und kann eigene Reports erstellen und bearbeiten, aber keine Abrechnung ändern. In Org B ist Sam Billing Manager und kann Zahlungsmethoden aktualisieren und Rechnungen herunterladen, sieht aber keine privaten Projekte, sofern seine Membership diesen Bereich nicht einschließt.
Das macht Wachstum langweilig im besten Sinne. Eine neue Org hinzuzufügen heißt nur Memberships und Rollen hinzufügen. Die Kernregeln bleiben gleich.
Schreibe eine einzelne Seite, die ein Kollege in zwei Minuten lesen kann. Wenn du Berechtigungen erklären kannst, ohne im Code zu wühlen, bist du gut aufgestellt.
Halte die Teile absichtlich klein:
Nutze Scope, um Rollenexplosion zu vermeiden. Viele Produkte brauchen nur drei Scopes: own, team, org.
| Role | View | Edit | Invite users | Billing | Scope note |
|---|---|---|---|---|---|
| Owner | Yes | Yes | Yes | Yes | Org‑weit, kann Ownership übertragen |
| Admin | Yes | Yes | Yes | No/Yes | Org‑weit, keine Ownership‑Änderungen |
| Member | Yes | Limited | No | No | Own + Team (wo zugewiesen) |
| Viewer | Yes | No | No | No | Read‑only im zugewiesenen Scope |
Sanity‑Check: Zeig diese Seite einem nicht‑technischen Kollegen und frag: „Kann ein Support‑Member einen Sales‑Report editieren?“ Zögert die Person, ist Scope oder Team‑Definition nicht klar.
Um Berechtigungen verständlich zu halten, entscheide, wer jede Ressource besitzt, und halte die Teiloptionen limitiert.
Mach die meisten Ressourcen org‑owned. Kunden denken meist in Firmenbegriffen: Rechnungen, Projekte, Kontakte, Tickets und Automationen gehören der Organisation, nicht einer einzelnen Person.
Teams sind nützlich, aber betrachte ein Team als Workflow‑Label für Routing und Sichtbarkeits‑Defaults, nicht als geheime Sicherheitslogik. Ein Team‑Tag kann Filter, Dashboards, Benachrichtigungen oder Queues antreiben, während der Zugriff weiterhin durch Rollen und Scope kommt.
User‑owned Ressourcen sollten die Ausnahme sein, reserviert für wirklich persönliche Dinge: Entwürfe, private Notizen, gespeicherte Views, API‑Tokens oder persönliche Einstellungen. Wenn ein Nutzer geht, entscheide, was passiert: löschen, übertragen oder privat behalten.
Eine kleine Menge an Share‑Regeln, die lesbar bleibt:
Wenn jemand sagt „Ich brauche Zugriff“, frag, auf welcher Ebene: privat, Team oder gesamte Org. Passt es nicht in diese drei, ist das oft ein Zeichen für unklare Scopes, nicht für einen neuen Sharing‑Modus.
Beispiel: Ein Support‑Ticket kann org‑owned sein (damit Manager über alle Tickets berichten können), team‑getaggt auf Support (damit es in die richtige Queue fällt) und Jordan zugewiesen sein (Verantwortung). Assignment sollte andere berechtigte Rollen nicht vom Ansichtsrecht ausschließen.
Berechtigungen brechen oft bei „Personen‑Events“: Jemand einladen, zwischen Teams verschieben oder entfernen. Diese Flows entscheiden, ob dein Modell vorhersehbar bleibt.
Behandle eine Einladung als Anfrage, eine Membership zu erstellen, nicht als direkten Zugriff. Die Einladung sollte Org, Team (optional) und die Rolle nennen, die bei Annahme gewährt wird.
Halte die Regeln strikt:
Temporärer Zugriff passt hier gut: Statt einer „temp user“-Rolle, erlaub eine Rollenzuweisung mit Enddatum. Nach Ablauf fällt der Zugriff automatisch weg und die Audit‑Spur bleibt sauber.
Wenn jemand eine Org verlässt, rate nicht, was mit seinen Ressourcen passieren soll. Wenn deine Regel „Ressourcen gehören der Org“ lautet, bleib dabei. Die Person kann weiterhin als Ersteller bestehen bleiben für die Historie, aber die Org bleibt Owner.
Hast du user‑owned Ressourcen, erzeuge vor der Entfernung eine Übertragungsanforderung für alles Sensible (Projekte, Dokumente, API‑Keys).
Ein Login kann zu vielen Orgs gehören, aber die App muss immer eine eindeutige „aktuelle Org“ haben. Mach das in der UI deutlich und scope jede Aktion auf diese Org.
Deaktivierung schlägt meist Löschung: Sie entzieht jetzt den Zugriff, erhält aber vergangene Aktionen zur Nachvollziehbarkeit.
Die meisten Berechtigungsmodelle scheitern, weil sie schneller wachsen als die Regeln. Schütze die Grundlagen (Tenant‑Grenze, Besitz, Scope) und behandle alles andere als Detail.
Rollenexplosion ist die klassische Falle. Ein Randfall taucht auf und du erstellst eine neue Rolle statt einer klareren Berechtigung oder eines Scopes. Nach ein paar Monaten weiß niemand mehr, was „Manager Plus" bedeutet. Wird ein Spezialfall oft gebraucht, mach ihn zur Erstklass‑Berechtigung. Wird er selten gebraucht, nutze einen temporären Grant mit Ablauf.
Permission Drift ist leiser, aber schlimmer. Jemand fügt "nur eine Ausnahme" hinzu und vergisst, das Ein‑Seiten‑Modell zu aktualisieren. Ein Jahr später stimmen das Dokument und das tatsächliche System nicht mehr überein. Aktualisiere zuerst das Modell, dann implementiere.
Teams als falsche Sicherheitsgrenzen sorgen für ständige Verwirrung. Wenn Ressourcen teamübergreifend geteilt werden können, sag es deutlich. Wenn nicht, erzwinge es im Code, nicht im Namen.
Frühwarnzeichen:
Wenn der Support einem Kunden helfen muss, ist „Gib ihm globalen Admin für eine Minute“ eine Tenant‑Leck‑Einladung. Bevorzuge expliziten, geloggten Zugriff mit engem Scope (eine Org, begrenzte Zeit, konkrete Aktionen).
Jede Anfrage sollte zuerst die aktive Organisation auflösen (aus Subdomain, Header, Session oder Route) und alles ablehnen, das nicht passt.
Nach dem Org‑Kontext halte Prüfungen in konsistenter Reihenfolge: Membership zuerst (gehört er zu dieser Org?), dann Rolle (was darf er hier?), dann Besitz oder Teilen (hat er Zugriff auf diesen Datensatz?). Führst du Besitzprüfungen vor Membership durch, kannst du Informationen darüber leaken, was existiert.
Führe eine kleine Menge End‑to‑End‑Tests mit echten Accounts aus, nicht nur Unit‑Tests:
Füge Basis‑Audit‑Events für Aktionen hinzu, die Macht verändern oder Daten verschieben: Rollenänderungen, Membership‑Entfernungen, Exporte, Löschungen, Einstellungen. Es muss nicht von Tag eins perfekt sein, aber es muss beantworten können: "Wer hat was wann gemacht?"
Überprüfe Defaults. Neue Orgs und neue Mitglieder sollten mit dem geringsten nötigen Zugriff starten. Eine kurze interne Berechtigungs‑FAQ für Support und Sales hilft ebenfalls, mit Beispielen wie „Kann ein Team‑Lead andere Teams sehen?“ und „Was passiert mit Zugriff nach Entfernung?"
Starte mit einem kleinen, echten Setup: einem Kundenunternehmen (eine Org) mit zwei Teams, Sales und Ops. Alle melden sich einmal an und wählen dann die Org, zu der sie gehören. Sales braucht Kundendaten und Angebote. Ops braucht Billing und interne Einstellungen.
Behandle Teams als Gruppierung und Workflow, nicht als Hauptberechtigungsumschaltung. Sie können Defaults und Routing beeinflussen, sollten aber nicht das einzige Tor sein.
Wähle eine kleine Rollemenge und halte sie stabil, während Features kommen: Admin, Member, Viewer. Die Rolle beantwortet „Was kannst du in dieser Org?“. Der Scope beantwortet „Wo kannst du es tun?".
Füge eine Besitzregel hinzu: Jede Ressource hat eine Org und einen Owner (oft den Ersteller). Bearbeiten ist erlaubt, wenn du Admin bist oder wenn du Owner bist und deine Rolle „edit own" einschließt. Lesen ist erlaubt, wenn deine Rolle „view" für diesen Ressourcentyp einschließt.
Beispiel: Ein Sales‑Member erstellt ein Angebot. Ein anderer Sales‑Member kann es ansehen, darf es aber nicht editieren, es sei denn, es wurde mit dem Team geteilt oder neu zugewiesen. Ein Ops‑Viewer sieht es nur, wenn die Regeln erlauben, dass Ops Sales‑Ressourcen einsehen darf.
Wenn du 200 Kunden‑Orgs onboardest, verwendest du dieselben Rollen und Besitzregeln. Du änderst Memberships, nicht das Modell.
Support‑Anfragen wie „Können Sie Zugriff auf X gewähren?“ werden eine Checkliste: Org und Ressource bestätigen, Rolle des Nutzers in dieser Org prüfen, Besitz und Teilen prüfen, dann Rolle ändern oder Ressource teilen. Vermeide Ein‑Klick‑Ausnahmen und hinterlasse eine Audit‑Notiz.
Behandle dein Ein‑Seiten‑Modell als Vertrag. Implementiere nur Regeln, die du in jedem API‑Call und auf jedem UI‑Screen durchsetzen kannst, sonst driftet Berechtigung in ein „kommt drauf an".
Starte klein: ein paar Rollen, klare Scopes und einfacher Besitz. Kommt eine neue Anfrage („Können wir eine Editor‑Manager‑Rolle hinzufügen?“), versuche zuerst Besitz oder Scope zu verschärfen. Neue Rollen sollten selten sein.
Für jede neue Ressource, die du hinzufügst, mache die Basics konsistent:
org_id (und team_id, wenn Teams gelten)Teste reale Flows, bevor du Edge‑Cases polierst: Einladungen, Org‑Wechsel, Admin‑Seiten und was passiert, wenn jemand mitten in der Sitzung den Zugang verliert.
Wenn du mit einem chatbasierten App‑Builder arbeitest, hilft es, das Berechtigungsmodell zuerst in einfacher Sprache zu schreiben und es neben die Produktspezifikation zu legen. Auf Koder.ai bieten Planning Mode sowie Snapshots und Rollback einen praktischen Weg, diese Szenarien auszuprobieren und zu bestätigen, dass sich die Regeln auf Web, Backend und Mobile gleich verhalten.