Hauptansichten & Rollenkonzept (Home, My Notes, Shared)
Dieses Dokument beschreibt die Architektur der Hauptansichten der Applikation und wie der Zugriff basierend auf Benutzerrollen und Berechtigungen gesteuert wird.
👥 Rollenbasierte Zugriffskontrolle (RBAC)
Die Anwendung unterscheidet strikt zwischen zwei Nutzertypen, um die Integrität der Daten zu gewährleisten: Diese Rollen werden im JWT-Token mitgeführt und sowohl im Vue-Frontend als auch in den Supabase RLS Policies geprüft.
| Rolle | ID | Berechtigungen | Einschränkungen |
|---|---|---|---|
| Leser | 1 | Kann öffentliche Notizen suchen und lesen. | Kann keine eigenen Notizen erstellen, bearbeiten, teilen oder löschen. |
| Autor | 2 | Vollzugriff: Erstellen, Bearbeiten, Löschen und Verwalten privater Notizen. | Keine (innerhalb der eigenen Datenhoheit). |
🏠 Übersicht der Ansichten
1. Home & My Notes (MyNotes.vue)
Dies ist das persönliche Dashboard für Nutzer mit der Rolle Autor.
- Technische Umsetzung: Die Seite lädt Notizen aus dem Supabase (oder der API) und filtert diese primär nach der Zugehörigkeit zum aktuellen Nutzer.
- Interaktion: Enthält die entry-card Komponente, die als Schnittstelle für die Erstellung neuer Inhalte dient.
- Navigation: Nutzt URL-Parameter (?from=my-notes), um den Kontext beim Öffnen einer Notiz-Detailseite beizubehalten.
2. Shared Notes (SharedNotes.vue)
Diese Ansicht dient dem gemeinschaftlichen Austausch von Informationen.
- Filterlogik: Ein computed property filtert die Liste der Notizen so, dass nur Einträge mit dem Status isPrivate: false angezeigt werden.
- Zweck: Ermöglicht es Lesern und Autoren gleichermaßen, auf öffentliches Wissen zuzugreifen, ohne die Privatsphäre anderer Nutzer zu verletzen.
🛠 Technische Kernfunktionen
URL-Synchronisation & Suche
Beide Ansichten sind mit der SearchBar verbunden. Jede Änderung der Suche oder des Filters wird sofort in der URL gespiegelt:
- Mechanismus: router.replace aktualisiert die Query-Parameter q (Suche) und type (Filter).
- Vorteil: Dies ermöglicht "Deep Linking". Ein Nutzer kann einen spezifischen Suchzustand kopieren und teilen.
Dynamische Filterung
Die Anzeige der Notizen erfolgt über eine reaktive Filterkette:
1. Suche: Textvergleich zwischen searchQuery und den Titeln/Inhalten der Notizen.
2. Status-Filter: Selektion nach all, private oder public.
🐳 Deployment & Docker
Die gesamte Anwendung (Frontend & Backend) ist Docker-ready. - Portabilität: Die App läuft identisch auf jedem System. - Sicherheit: Docker-Container isolieren die Applikationslogik vom Host-System.
🛡️ Schwachstellen & Vorbeugung
| Schwachstelle | Vorbeugung |
|---|---|
| Rollen-Bypass (Frontend) | Ein Nutzer mit der ID 1 (Leser) könnte versuchen, die MyNotes-Route manuell aufzurufen. |
| Vorbeugung | Route-Guards: Der Vue-Router prüft vor dem Laden der Seite die user_metadata.user_rolle. Zusätzlich blendet die TopBar Navigationslink für unberechtigte Rollen aus. |
| Information Disclosure | Private Notizen könnten fälschlicherweise in der öffentlichen Liste erscheinen. |
| Vorbeugung | Strikte Filterung: Die Filterlogik im Frontend nutzt explizite Booleans (note.isPrivate === true). Im produktiven Backend erfolgt die Filterung bereits auf Datenbankebene (SQL-Scope). |
| XSS via Suchanfrage | Anzeige des Suchbegriffs im UI ("Ergebnisse für..."). |
| Vorbeugung | Vue.js nutzt automatisches HTML-Escaping bei der Text-Interpolation ({{ }}). |
🔒 Datenschutz & Sicherheit
- Privatsphäre per Default: Neue Notizen können explizit als "Privat" markiert werden, wodurch sie für alle anderen Nutzer unsichtbar bleiben.
- Eindeutige Identifizierung: Die Applikation nutzt die im
localStoragehinterlegten Nutzerdaten (user_metadata), um sicherzustellen, dass Autoren nur ihre eigenen Notizen modifizieren können. - Feedback-System: Über die
SnackBarwird der Nutzer über den Erfolg von Aktionen oder über blockierte Sicherheitsrisiken (z.B. ungültige Eingaben) informiert.
💡 UX Besonderheiten
- Empty States: Wenn keine Notizen den Filterkriterien entsprechen, erscheint ein visueller Platzhalter ("No notes yet"), um Verwirrung zu vermeiden.
- Responsive Design: Die Layouts für Home und Shared Notes nutzen ein einspaltiges Design auf Mobilgeräten und optimierte Abstände auf Desktops (
max-w-4xl).