Files
MindSift/Doku/sharing-and-permissions.md
sandrodach 3480859d8a
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 8s
docs: add comprehensive technical wiki documentation and flaws analysis; remove legacy BRAIN.md
2026-10-26 13:27:35 +01:00

5.9 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 mit Lese- oder Schreibrechten.
  • 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.