Files
MindSift/Doku/sharing-and-permissions.md
T
sandrodachandClaude Sonnet 5.5 4e9c4ffa8c
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m5s
feat(tasks): add read-only sharing permission for task lists
Task list shares now carry a permission (editor/viewer). The server rejects
writes from viewers with 403, and the UI hides or disables edit controls
for read-only lists.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 22:30:28 +01:00

6.2 KiB

👥 Synchrones Teilen & Berechtigungskonzept

MindSift bietet ein mehrstufiges Kollaborations- und Freigabesystem. Es gewährleistet strikte Datensouveränität und Privatsphäre, ermöglicht aber gleichzeitig reibungslose Zusammenarbeit in Teams, Familien oder Unternehmen.


🛡️ 1. Globale Rollen & System-Isolation

Globale Rollen

  • Server-Admin (role = 'admin'): Vollzugriff auf System-Einstellungen, E-Mail-Konfiguration (SMTP), Benutzerverwaltung, Einladungscodes und System-Statistiken.
  • Mitglied (role = 'member'): Regulärer Benutzer; arbeitet in seinen eigenen Notizen, Aufgaben und freigegebenen Teams.

System-Isolations-Modi (sharing_mode)

Der Server-Admin legt global fest, wie Benutzer miteinander interagieren dürfen:

┌────────────────────────────────────────────────────────────────────────┐
│                        System-Isolations-Modi                          │
├──────────────────────┬─────────────────────────┬───────────────────────┤
│    strict_private    │       teams_only        │         open          │
│  (Strikt Isoliert)   │  (Teams & Gruppen)      │   (Offene Instanz)    │
│                      │   [EMPFOHLENER STANDARD]│                       │
├──────────────────────┼─────────────────────────┼───────────────────────┤
│ Kein Adressbuch      │ Adressbuch zeigt nur    │ Alle Benutzer sehen   │
│ Keine Freigaben      │ gemeinsame Teammit-     │ alle anderen Konten   │
│ Autarke Einzel-Instanz│ glieder                 │ im System             │
└──────────────────────┴─────────────────────────┴───────────────────────┘
  1. strict_private: Vollständige Abschottung. Benutzer wissen nicht voneinander. Keine Freigaben möglich.
  2. teams_only (Standard): Kollaboration ist strikt an Gruppen gebunden. Ein Benutzer kann Objekte nur mit Personen teilen, die mindestens in einer gemeinsamen Gruppe/Team mit ihm sind.
  3. open: Geeignet für Familien oder kleine Firmen. Jeder Benutzer kann für jeden anderen Benutzer Objekte freigeben.

🏢 2. Gruppen & Teams (teams & team_members)

Gruppen strukturieren Benutzer (z.B. „Familie", „Entwicklung", „Marketing"):

  • Gruppen-Admin: Darf Mitglieder einladen, Rollen ändern oder die Gruppe löschen.
  • Gruppen-Mitglied: Hat Zugriff auf alle mit der Gruppe geteilten Ressourcen (Ordner, Aufgabenlisten, Einkaufslisten, Notizen).

Wird eine Ressource für eine Gruppe freigegeben, erhalten alle aktuellen und zukünftigen Mitglieder der Gruppe automatisch Zugriff, ohne dass Einzelberechtigungen gepflegt werden müssen.


📁 3. Entkoppelte Ordner-Freigabe (Decoupled Folder Mounts)

Das traditionelle Problem

In herkömmlichen Cloud-Systemen (wie Google Drive oder Nextcloud) führt das Verschieben eines geteilten Ordners oft dazu, dass er auch bei allen anderen Teilnehmern den Platz wechselt. Verschiebt ein Kollege den Ordner in sein Unterverzeichnis „Archiv", verschwindet er beim Ersteller aus dem Sichtfeld.

Die MindSift-Lösung: Unabhängige Einhängepunkte (Mounts)

MindSift entkoppelt die physische Ordner-Identität von der persönlichen Ordner-Hierarchie des Benutzers:

Eigentümer (Alice):
  Ordner: "Kundenprojekte"
    └── Geteilter Ordner: "Projekt Phoenix" (wsf_123)
          ├── spec.md
          └── roadmap.md

Empfänger (Bob):
  Ordner: "Meine Aufgaben"
    └── "Wichtiges"
          └── Einhängepunkt: "Projekt Phoenix" (wsf_123 eingehängt via mount_path)
                ├── spec.md
                └── roadmap.md

Wie es technisch funktioniert:

  1. Der geteilte Ordner existiert als Entität in workspace_shared_folders.
  2. Beim Eigentümer liegt der Ordner unter seinem Pfad.
  3. Jeder Empfänger erhält in workspace_folder_mounts seinen eigenen lokalen mount_path.
  4. Unabhängiges Verschieben: Schiebt Bob den Ordner an eine andere Stelle in seinem Dateibaum, wird ausschließlich sein persönlicher mount_path aktualisiert. Alice und andere Teammitglieder bemerken davon nichts.
  5. Inhaltliche Synchronisation: Verschiebt, erstellt oder bearbeitet jemand eine Notiz innerhalb des geteilten Ordners, wird der relative Unterpfad (sub_folder_path) synchronisiert, sodass alle dieselbe interne Dokumentstruktur sehen.

📄 4. Entkoppelte Notizen-Freigabe (doc_user_folders)

Dasselbe Prinzip gilt für einzeln geteilte Dokumente:

  • Erhält Benutzer Bob eine einzelne Notiz von Alice freigegeben, kann Bob diese Notiz in jeden beliebigen seiner eigenen Ordner einsortieren.
  • Seine persönliche Zuordnung wird in der Tabelle doc_user_folders (user_id, doc_id, folder_path) gespeichert.
  • Die Original-Notiz von Alice verbleibt an ihrem ursprünglichen Platz.

📋 5. Geteilte Aufgaben- & Einkaufslisten

  • Aufgabenlisten (task_list_shares): Freigabe für Teams oder Einzelbenutzer, Spalte permission:
    • editor: Aufgaben anlegen, bearbeiten, abhaken, verschieben und löschen; Liste umbenennen und Spalten anpassen.
    • viewer: Nur Lesezugriff. Der Server lehnt Schreibzugriffe mit 403 ab (storage.ErrTaskListReadOnly).
    • Hat ein Benutzer über mehrere Wege Zugriff (direkt und über Gruppen), gilt die höchste Berechtigung.
  • Geteilte Listen (list_shares):
    • Rolle editor: Einträge hinzufügen, ändern, abhaken und löschen.
    • Rolle viewer: Nur Lesezugriff (Echtzeit-Ansicht).
  • Einheitlicher Freigabe-Dialog: UnifiedShareModal.tsx bündelt alle Freigabeoptionen (Teams, Benutzer, Berechtigungsstufen) in einer konsistenten Benutzeroberfläche.