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>
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 │
└──────────────────────┴─────────────────────────┴───────────────────────┘
strict_private: Vollständige Abschottung. Benutzer wissen nicht voneinander. Keine Freigaben möglich.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.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:
- Der geteilte Ordner existiert als Entität in
workspace_shared_folders. - Beim Eigentümer liegt der Ordner unter seinem Pfad.
- Jeder Empfänger erhält in
workspace_folder_mountsseinen eigenen lokalenmount_path. - Unabhängiges Verschieben: Schiebt Bob den Ordner an eine andere Stelle in seinem Dateibaum, wird ausschließlich sein persönlicher
mount_pathaktualisiert. Alice und andere Teammitglieder bemerken davon nichts. - 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, Spaltepermission:editor: Aufgaben anlegen, bearbeiten, abhaken, verschieben und löschen; Liste umbenennen und Spalten anpassen.viewer: Nur Lesezugriff. Der Server lehnt Schreibzugriffe mit403ab (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).
- Rolle
- Einheitlicher Freigabe-Dialog:
UnifiedShareModal.tsxbündelt alle Freigabeoptionen (Teams, Benutzer, Berechtigungsstufen) in einer konsistenten Benutzeroberfläche.