Files
MindSift/Doku/sharing-and-permissions.md
T
sandrodachandClaude Sonnet 5.5 bc13235da6
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 8s
docs: rewrite documentation and README from current codebase, add flaw analysis
Remove outdated claims (CRDT, DocRooms, presence, .md files on disk) and
document the actual architecture, API, permissions and known flaws.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:09:05 +01:00

3.9 KiB
Raw Blame History

Teilen & Berechtigungen

Rollen

Ebene Werte Bedeutung
Server admin, member Admins verwalten Benutzer, Einladungen und Einstellungen (/admin/*).
Gruppe admin, member Gruppen-Admins ändern/löschen die Gruppe und verwalten Mitglieder. Wer eine Gruppe anlegt, wird Admin.
Ressource siehe unten Eigentümer, Bearbeiter, Leser.

Berechtigungen je Ressource

Ressource Eigentümer Bearbeiter Leser Freigabe an
Aufgabenliste (task_list_shares.permission) alles, löschen, (un)teilen Aufgaben anlegen/ändern/abhaken/verschieben/löschen, Liste umbenennen, Spalten ändern nur ansehen Benutzer, Gruppen
Geteilte Liste (list_shares.role) alles, löschen, (un)teilen Einträge anlegen/ändern/abhaken/löschen nur ansehen Benutzer, Gruppen
Notiz (doc_shares, doc_team_shares) schreiben – nur lesen Benutzer, Gruppen
Geteilter Ordner (workspace_folder_shares) schreiben – nur lesen Benutzer, Gruppen
  • Notizen und Ordner sind absichtlich schreibgeschützt für Empfänger. Das erzwingt eine Migration beim Start (permission = 'read'); Schreibpfade im Code sind tot (FLAW-17).
  • Bei Aufgabenlisten und Listen gilt: Hat jemand mehrere Zugriffswege (direkt und über Gruppen), zählt die höchste Stufe.
  • Für Gruppen gilt die Freigabe für alle aktuellen und künftigen Mitglieder.
  • Aufgabenlisten besitzen zusätzlich das Altfeld team_id: Mitglieder dieser Gruppe haben ohne Freigabezeile Bearbeiterrechte. Eine Gruppenfreigabe über den Dialog setzt team_id, falls es noch leer ist.

Aufgabenlisten teilen (Details)

  1. Eigentümer öffnet „Teilen“ an der Liste, wählt Gruppe oder Benutzer und die Stufe Bearbeiten oder Nur Lesen.
  2. POST /task-lists/{id}/shares speichert permission; erneutes Hinzufügen desselben Ziels ändert die Stufe.
  3. GET /task-lists liefert je Liste permission (owner/editor/viewer). Das Frontend blendet für viewer alle Eingabemöglichkeiten aus und zeigt „Nur Lesen“.
  4. Der Server prüft unabhängig davon jeden Schreibzugriff (403, storage.ErrTaskListReadOnly).

Bestehende Freigaben aus der Zeit vor dieser Stufe wurden mit editor migriert, behalten also ihr Verhalten.

Isolations-Modi (system_settings.sharing_mode)

Werte: strict_private, teams_only (Standard), open. Gedacht ist:

Modus Zweck
strict_private Keine Sichtbarkeit zwischen Benutzern
teams_only Freigaben nur zwischen Mitgliedern gemeinsamer Gruppen
open Jeder kann für jeden freigeben

Tatsächlich wird der Modus nur in GetDiscoverableUsers ausgewertet, und dort liefert teams_only bereits alle Benutzer. GET /collaborators ignoriert den Modus, und keine Freigabe-Funktion prüft ihn. Die Einstellung hat derzeit also kaum Wirkung (FLAW-10).

Entkoppelte Ablage geteilter Notizen und Ordner

  • Geteilte Ordner: Der Ordner existiert einmal (workspace_shared_folders); jeder Empfänger hat seinen eigenen Einhängepfad (workspace_folder_mounts.mount_path). Verschiebt ein Empfänger den Ordner, ändert sich nur sein Pfad. Der Unterpfad innerhalb des Ordners (documents.sub_folder_path) gilt für alle.
  • Einzelne Notizen: Jeder Empfänger kann eine geteilte Notiz in einen eigenen Ordner legen (doc_user_folders); die Notiz des Eigentümers bleibt unberührt.

Sitzungen und Zugriff

  • Tokens werden bei Passwortänderung, Rollenwechsel, Deaktivierung und „Alle Sitzungen beenden“ ungültig (token_version); ausgeloggte Tokens landen in revoked_tokens.
  • Registrierung nur per Einladungscode oder, wenn vom Admin freigeschaltet, offen. Das erste Konto wird immer Administrator.
  • Bekannte Lücken in der Zugriffskontrolle: FLAW-01, FLAW-02, FLAW-03, FLAW-06, FLAW-07, FLAW-08, FLAW-24.