Blog
Build in Public
30. April 202610 min

3 Zugriffsebenen zum Teilen, ohne alles preiszugeben: Die Überarbeitung der Berechtigungen in TAMSIV

Marie lud Camille am Dienstagabend zum Ordner "Hochzeit Léa & Thomas" ein. Sie wollte ihr nur die Liste der Dienstleister und die Gästeverwaltung zeigen. Am Mittwochmittag hatte Camille das Budget geändert, zwei Aufgaben "versehentlich" gelöscht und den Ordner umbenannt. Nicht aus Bosheit. Nur weil die Freigabe binär war: Entweder du bist dabei oder nicht, und wenn du dabei bist, kannst du alles tun.

Dieses Szenario wiederholt sich immer wieder, sobald eine kollaborative App wächst. Die Granularität des Zugriffs ist kein technisches Detail, sondern das, was ein Tool, das man der ganzen Familie leihen kann, von einem Tool unterscheidet, das man nur zögernd teilt. Die Version 1.29 von TAMSIV führt drei verschiedene Zugriffsebenen (Lesen, Schreiben, Vollzugriff) ein, die für jedes Mitglied einer Freigabe, für jede Aufgabe, Notiz, jedes Ereignis und jeden Ordner gelten. 1258 Zeilen hinzugefügt, 824 gelöscht, sechs Sprachen aktualisiert – ein Projekt, das wir intern "Phase A + B Berechtigungsüberarbeitung" nannten.

Kernpunkte
  • Drei klare Zugriffsebenen ersetzen die binäre Freigabe: Lesen (ansehen ohne zu ändern), Schreiben (Inhalt ansehen und ändern), Vollzugriff (ändern, löschen, Zuweisungen verwalten).
  • Jedes Mitglied eines geteilten Ordners erhält ein sichtbares Abzeichen (graues Auge, blauer Stift, grüner Schild), das den Zugriff für alle auf einen Blick lesbar macht, nicht nur für den Eigentümer.
  • Die Abschnitte "Baumstruktur" und "Mitglieder" werden einklappbar, die Zugriffsbaumstruktur wird mit durchgehenden Verbindern, nach Tiefe eingerückten Karten und einer pro Ebene erweiterten horizontalen Linie neu gestaltet.
  • Die Komponente PermissionLevelPicker zentralisiert die Auswahl: 186 Zeilen, zugängliches Modal, explizite Beschreibungen in sechs Sprachen, deaktivierter Zustand für nicht bearbeitbare Rollen.
  • Die Rolle eines Zugewiesenen wird im Kontext des Ordners aufgelöst (direkt zugewiesen vs. extern), mit den Schlüsseln roles.assigned und roles.external, die visuelle Verwirrung vermeiden.
Kinematische Visualisierung konzentrischer Schichten goldener und bernsteinfarbener Schlüssel, die die abgestuften Zugriffsebenen einer kollaborativen Freigabe darstellen

Warum die binäre Freigabe nicht mehr funktioniert, sobald eine Familie involviert ist?

In den meisten kollaborativen Consumer-Apps beschränkt sich der Zugriff auf zwei Zustände: Du bist Mitglied, oder du bist es nicht. Wenn du jemanden einlädst, gibst du ihm standardmäßig das Recht, alles zu tun. Ändern, löschen, Teilnehmer hinzufügen, Daten ändern, umbenennen. Das ist das Modell von Trello für grundlegende Boards, der meisten geteilten Apple-Notizen und vieler geteilter Einkaufslisten.

Dieses Modell funktioniert, solange du nur mit einer vertrauenswürdigen Person teilst und solange alle das gleiche Interesse haben, den Inhalt zu respektieren. Sobald du einen dritten Akteur hinzufügst oder sich die Dynamik ändert, beginnt die Reibung. Dein Partner muss die Einkaufsliste ändern, aber deine Schwiegermutter, die das Wochenende verbringt, muss sie nur sehen. Dein Team kann das Kundenbriefing bearbeiten, aber der Kunde selbst sollte es nur lesen. Deine Schwester, die ihre Hochzeit mit dir vorbereitet, braucht die volle Kontrolle, aber ihre Schwägerin, die gelegentlich hilft, muss nicht den gesamten Ordner löschen können.

Das Fehlen von Zugriffsebenen erzwingt eine schmerzhafte binäre Wahl: Entweder du überinvestierst die Eingeladenen (und riskierst, dass ein Angehöriger unbeabsichtigt etwas ändert), oder du unterinvestierst (und die Person kann nichts Nützliches tun, also gibt sie auf). Das ist genau die Reibung, die Menschen dazu bringt, zu WhatsApp-Screenshots und zu verstreuter mentaler Belastung in zehn verschiedenen Tools zurückzukehren.

Welche drei Zugriffsebenen gibt es in TAMSIV?

Die Überarbeitung führt drei verschiedene Ebenen ein, jede mit ihrem Symbol, ihrer Farbe und ihrer Beschreibung, zugänglich über einen einheitlichen Selektor in der gesamten App.

Lesen (graues Auge)

Das Mitglied sieht den gesamten Inhalt, kann aber nichts ändern. Es kann kommentieren, mit Emojis reagieren, Benachrichtigungen vom Ordner erhalten, aber keine neuen Aufgaben erstellen, keine Daten ändern, keine Zuweisungen ändern. Dies ist die perfekte Ebene für einen Angehörigen, den man auf dem Laufenden hält, einen Kunden, den man konsultiert, einen Elternteil, der die Organisation verfolgen möchte, ohne etwas zu riskieren.

Schreiben (blauer Stift)

Das Mitglied kann vorhandenen Inhalt sehen und ändern. Es kann neue Aufgaben erstellen, Notizen ändern, Fotos hinzufügen, ein Ereignis verschieben. Aber es kann nichts löschen, was es nicht selbst erstellt hat, noch die Zuweisungen anderer verwalten. Dies ist der übliche Kollaborationsmodus, den man verwendet, wenn man gemeinsam an demselben Projekt arbeitet.

Vollzugriff (grüner Schild)

Das Mitglied hat die gleichen Rechte wie der Eigentümer, mit einer Ausnahme: Es kann die gesamte Freigabe nicht auflösen. Es kann ändern, löschen, Zuweisungen verwalten, neue Mitglieder einladen, die Zugriffsebenen anderer ändern. Dies ist der "Co-Organisator"-Modus, perfekt für einen Partner, einen Geschäftspartner, einen Elternteil, dem man alles delegieren möchte, ohne jedoch das Eigentum am Ordner zu übertragen.

Die drei Ebenen werden durch einen konsistenten visuellen Selektor dargestellt: Symbol + Farbe + Beschriftung, mit einer Erklärung beim Tippen. Der Selektor heißt PermissionLevelPicker, befindet sich in frontend/src/components/common/ und wird überall dort verwendet, wo eine Zugriffsebene angezeigt oder geändert werden muss. Diese Einzigartigkeit der Komponente stellt sicher, dass ein Mitglied mit Lesezugriff auf den Ordner "Hochzeit" sich visuell als Lesezugriff auf die Aufgabe "Raum buchen" erkennt, ohne Neuinterpretation.

Wie sehe ich, wer welchen Zugriff in einem geteilten Ordner hat?

Der zweite große Teil der Überarbeitung betrifft den Bildschirm, der die Mitglieder auflistet. Zuvor sahen wir eine flache Liste von Avataren mit Vornamen. Jetzt wird jedes Mitglied von einem farbigen Zugriffsabzeichen begleitet, und die Liste ist nach Ebene sortiert (Vollzugriff oben, dann Schreiben, dann Lesen). Auf einen Blick sieht der Eigentümer, wer was tun kann.

Die Abschnitte "Baumstruktur" und "Mitglieder" der Details einer Aufgabe, Notiz oder eines Ereignisses sind jetzt einklappbar. Du tippst auf den Header, der Pfeil dreht sich, der Abschnitt klappt ein oder aus. Auf Bildschirmen mit vielen Mitgliedern oder tiefen Hierarchien ändert das alles für die Lesbarkeit.

Die Zugriffsbaumstruktur selbst wurde neu gestaltet. Zuvor war es eine flache Liste mit zwei oder drei ungefähren Einrückungen. Jetzt hat jede Tiefenebene ihre eigene Zelle, ihre eigene sich erstreckende horizontale Linie, ihre eigenen durchgehenden Baumverbinder, die die Hierarchie wie einen echten Baum zeichnen. Wenn ein Ordner in einen anderen verschachtelt ist und eine Aufgabe in den untergeordneten Ordner verschachtelt ist, macht der Baum die Vererbungskette visuell, nicht verbal.

Wie funktioniert die Vererbung von Berechtigungen über die Hierarchie hinweg?

TAMSIV ermöglicht das Verschachteln von Ordnern auf sechs Ebenen. Wenn du jemandem Schreibzugriff auf einen übergeordneten Ordner gibst, erbt er automatisch Schreibzugriff auf alle Unterordner und deren Inhalt. Dies ist das Standardverhalten und wird in 80% der Fälle erwartet.

Die neue Architektur ermöglicht es aber auch, eine Zugriffsebene lokal zu überschreiben. Ein Mitglied mit Schreibzugriff auf den übergeordneten Ordner kann auf einen bestimmten Unterordner auf Lesezugriff beschränkt werden, da dieser Unterordner sensible Informationen enthält. Die Überschreibung ist explizit (ein spezifisches Abzeichen erscheint im Baum) und wird im Kontext des übergeordneten Ordners angezeigt, um nachvollziehbar zu bleiben.

Diese Vererbung mit Überschreibung ist technisch komplex. Sie basiert auf den Row Level Security Policies von PostgreSQL, erweitert durch 31 RLS-Richtlinien, die die effektive Ebene eines Benutzers für ein bestimmtes Element berechnen, indem sie den Baum hochgehen. Das Ergebnis wird serverseitig berechnet, nicht clientseitig, was Berechtigungsdrifts und Frontend-Exploits vermeidet.

Warum diese Überarbeitung 15 Dateien und 6 Sprachen betraf?

Berechtigungen sind ein übergreifendes Konzept. Sie leben in den Details einer Aufgabe (wer kann ändern?), in der Mitgliederliste eines Ordners (wer sieht was?), im Freigabe-Selektor (wem gebe ich Zugriff?), im Zuweisungsbildschirm (wer kann zugewiesen werden?), in der Zugriffsbaumstruktur (wie wird die Vererbung berechnet?). Berechtigungen zu ändern bedeutet, das Rückgrat der Zusammenarbeit zu berühren.

Die Überarbeitung umfasste 15 geänderte Frontend-Dateien, darunter die wichtigsten: AssigneesModal.tsx (130 Zeilen hinzugefügt, Verwaltung der Rolle eines Zugewiesenen in seinem Ordner), GroupMembersModal.tsx (62 Zeilen hinzugefügt, Zugriffsabzeichen), GroupHierarchySection.tsx (346 Zeilen überarbeitet, Baum neu gestaltet), TaskAccessTree.tsx (24 Zeilen angepasst, Integration des Abzeichens in den Gruppenast) und die neue Komponente PermissionLevelPicker.tsx (186 Zeilen, wiederverwendbares Modal).

Auf i18n-Seite wurden die neuen Schlüssel access.read/write/readWrite/full, access.readDescription/writeDescription/fullDescription, access.permissionLevel, roles.assigned/external in den sechs Sprachdateien (FR, EN, DE, ES, IT, PT) hinzugefügt. Die Übersetzung erfolgte über unser automatisches OpenRouter-Skript mit menschlicher Überprüfung der Nuancen. Ein falsches Label für "Total" auf Deutsch oder "Écriture" auf Italienisch kann ausreichen, um die gesamte Lesbarkeit der Funktion zu verlieren.

Welche familiären und beruflichen Anwendungen die Granularität freischaltet?

Was sich im wirklichen Leben ändert, ist nicht der Code. Es sind die Nutzungsszenarien, die ohne Umwege möglich werden.

Eine Familie mit Teenager. Du gibst deinem Partner Vollzugriff auf den Ordner "Zuhause", Schreibzugriff deinem 15-jährigen Teenager, damit er seine eigenen Aufgaben abhaken kann, ohne die der ganzen Familie zu löschen, Lesezugriff den Großeltern, die das Wochenende verbringen und nur wissen wollen, ob sie Brot mitbringen müssen.

Ein Freelancer mit einem Kunden. Du teilst den Ordner "Kunden-Website X" mit deinem Kunden im Lesemodus (er sieht den Fortschritt, er kommentiert), mit deinem Subunternehmer im Schreibmodus (er ändert den Inhalt, ohne dich abmelden zu können), mit deinem Partner im Vollzugriff (er kann alles verwalten, wenn du in den Urlaub fährst).

Ein Verein oder eine Elternvertretung. Du gibst dem Vorstand (3 Personen) Vollzugriff, den aktiven Freiwilligen (15 Personen) Schreibzugriff, den Eltern Lesezugriff, die die Organisation des Schulfestes verfolgen möchten, ohne versehentlich den Zeitplan zu ändern.

Eine Hochzeit mit mehreren Beteiligten. Du gibst deinem Partner und dem Trauzeugen Vollzugriff, den vier Brautjungfern, die bei bestimmten Aspekten helfen, Schreibzugriff, den Eltern und Schwiegereltern Lesezugriff, die die Gäste und den Tagesablauf verfolgen möchten, ohne alles kaputt zu machen.

Häufig gestellte Fragen

Kann der Ordnerbesitzer die Zugriffsebene der Mitglieder nach der Einladung ändern?

Ja. Vom Bildschirm "Mitglieder" des Ordners aus kann der Besitzer (und jedes Mitglied mit Vollzugriff) die Zugriffsebene jedes Einzelnen jederzeit ändern, ohne neu einzuladen. Die Änderung wird in Echtzeit auf allen Geräten über Supabase Realtime angewendet, das betroffene Mitglied sieht seine Ebene in der App wechseln, ohne sich neu anmelden zu müssen.

Was passiert, wenn ich jemandem Lesezugriff gebe, der vorher Vollzugriff hatte?

Die früheren Beiträge (erstellte Aufgaben, hochgeladene Fotos, Kommentare) bleiben im Ordner. Die Person verliert lediglich die Möglichkeit, sie zu ändern oder zu löschen. Sie sieht weiterhin den gesamten Inhalt, aber die Bearbeitungsschaltflächen verschwinden auf der Benutzeroberfläche, und die Anfragen auf Serverseite werden von den RLS-Richtlinien abgelehnt, wenn jemand versucht, dies über eine direkte Anfrage zu umgehen.

Kann ich jemandem Vollzugriff auf einen Unterordner geben, ohne ihm Vollzugriff auf den übergeordneten Ordner zu geben?

Nein, die Vererbung geht nach unten, aber nicht nach oben. Wenn du möchtest, dass jemand Vollzugriff auf einen Unterordner hat, muss er mindestens Lesezugriff auf den übergeordneten Ordner haben (sonst kann er nicht zum Unterordner navigieren). Du kannst jedoch das Gegenteil tun: Vollzugriff auf den übergeordneten Ordner geben und auf Schreib- oder Lesezugriff auf einen bestimmten Unterordner herabsetzen, um einen sensiblen Teil zu schützen.

Gelten die Zugriffsebenen auch für Anhänge und Kommentare?

Ja. Ein Mitglied mit Lesezugriff kann Anhänge sehen, aber keine hochladen. Es kann Kommentare lesen, aber trotzdem welche schreiben und mit Emojis reagieren (der Kommentar ist eine Form des nicht-destruktiven Beitrags, offen für alle Ebenen). Die RLS-Richtlinien werden konsistent auf die sechs beteiligten Tabellen angewendet: Aufgaben, Notizen, Ereignisse, Anhänge, Kommentare, Reaktionen.

Wie erfolgt die Migration für Ordner, die vor Version 1.29 erstellt wurden?

Alle bestehenden Mitglieder wurden auf die Ebene "Vollzugriff" migriert (was dem Verhalten vor der Überarbeitung entspricht). Es ist keine Benutzeraktion erforderlich. Wenn du die Granularität für einen bestehenden Ordner nutzen möchtest, öffne einfach den Bildschirm "Mitglieder" und passe die Ebene jeder Person an. Die Änderung erfolgt sofort, ohne Ablehnung der Einladung oder Datenverlust.

Und du, hast du schon mal jemandem zu weitreichenden Zugriff auf eine geteilte App gegeben?

Wenn du diesen Artikel liest, dann wahrscheinlich, weil du die Szene schon mindestens einmal erlebt hast. Du hast einen Angehörigen zu einem Ordner oder Projekt hinzugefügt und ein paar Tage später festgestellt, dass die Person etwas geändert, gelöscht oder neu organisiert hatte, was dir wichtig war. Nicht aus Böswilligkeit. Nur weil die App dir nicht erlaubte zu sagen: "Du kannst schauen, aber nicht anfassen."

Die Version 1.29 von TAMSIV löst dieses Dilemma mit zwei Fingertipps. Du lädst ein, wählst die Ebene, du kannst sie jederzeit ändern. Die Freigabe wird zu einem Schieberegler, nicht mehr zu einem Schalter. Und das ist vielleicht das, was dir den Mut geben wird, deine Ordner einem größeren Kreis zu öffnen, als den zwei Personen, die du zuvor eingeladen hast.

Lade TAMSIV kostenlos im Play Store herunter und teste die neuen Zugriffsebenen ab Version 1.29.