mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-15 15:19:40 +02:00
- Add uload project with apps/web structure
- Reorganize from flat to monorepo structure
- Remove PocketBase binary and local data
- Update to pnpm and @uload/web namespace
- Add picture project to monorepo
- Remove embedded git repository
- Unify all package names to @{project}/{app} schema:
- @maerchenzauber/* (was @storyteller/*)
- @manacore/* (was manacore-*, manacore)
- @manadeck/* (was web, backend, manadeck)
- @memoro/* (was memoro-web, landing, memoro)
- @picture/* (already unified)
- @uload/web
- Add convenient dev scripts for all apps:
- pnpm dev:{project}:web
- pnpm dev:{project}:landing
- pnpm dev:{project}:mobile
- pnpm dev:{project}:backend
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
4.1 KiB
4.1 KiB
Storage Bucket Setup für User Uploads
Schritt 1: SQL Statement ausführen
Option A: Erste Installation (Policies existieren noch nicht)
- Öffne die Supabase Dashboard: https://supabase.com/dashboard
- Wähle dein Projekt aus
- Navigiere zu SQL Editor
- Kopiere den Inhalt von
setup-storage-bucket.sql - Führe das SQL-Script aus
Option B: Update (Policies existieren bereits)
- Öffne die Supabase Dashboard: https://supabase.com/dashboard
- Wähle dein Projekt aus
- Navigiere zu SQL Editor
- Kopiere den Inhalt von
update-storage-policies.sql - Führe das SQL-Script aus
Falls Fehler "policy already exists": Verwende update-storage-policies.sql statt setup-storage-bucket.sql
Schritt 2: Überprüfung
Bucket überprüfen
Navigiere zu Storage im Supabase Dashboard:
- Du solltest einen Bucket namens
user-uploadssehen - Public: ✓ Enabled
- File Size Limit: 10 MB
- Allowed MIME types: image/jpeg, image/jpg, image/png, image/webp
Policies überprüfen
Navigiere zu Storage > Policies:
- Du solltest 4 Policies für
user-uploadssehen:- ✓ Users can upload their own images (INSERT)
- ✓ Public images are publicly accessible (SELECT)
- ✓ Users can update their own images (UPDATE)
- ✓ Users can delete their own images (DELETE)
Schritt 3: Testen
Test 1: Upload über die Web-App
- Öffne die Web-App: http://localhost:5173/app/upload
- Wähle ein Bild aus oder nutze Drag & Drop
- Klicke auf "Upload"
- Das Bild sollte erfolgreich hochgeladen werden
- Überprüfe in Storage > user-uploads im Supabase Dashboard
Test 2: Zugriff auf öffentliche URL
- Nachdem Upload erfolgreich war, kopiere die
public_urlaus der Konsole - Öffne die URL in einem neuen Browser-Tab
- Das Bild sollte sichtbar sein (ohne Authentifizierung)
Test 3: Galerie-Integration
- Navigiere zur Galerie: http://localhost:5173/app/gallery
- Die hochgeladenen Bilder sollten in der Galerie erscheinen
- Klicke auf ein Bild, um die Detail-Ansicht zu öffnen
Datei-Struktur im Bucket
user-uploads/
├── {user_id_1}/
│ ├── 1234567890-abc123.jpg
│ ├── 1234567891-def456.png
│ └── 1234567892-ghi789.webp
└── {user_id_2}/
├── 1234567893-jkl012.jpg
└── 1234567894-mno345.png
Sicherheit
✅ Was ist geschützt:
- User können nur in ihren eigenen Ordner hochladen
- User können nur ihre eigenen Dateien bearbeiten/löschen
- Upload nur für authentifizierte User
- Datei-Größe ist auf 10MB begrenzt
- Nur erlaubte Bild-Formate (JPG, PNG, WebP)
⚠️ Was ist öffentlich:
- Alle hochgeladenen Bilder sind über ihre public_url zugänglich
- Jeder mit der URL kann das Bild sehen (auch ohne Account)
- Dies ist gewollt für die Galerie-Anzeige
🔒 Optionale Verbesserungen für später:
- Private Bilder: Separate Bucket für private Uploads
- Signed URLs: Temporäre URLs für sensible Inhalte
- CDN: CloudFlare oder AWS CloudFront vor Supabase Storage
Troubleshooting
Fehler: "Bucket bereits vorhanden"
- Kein Problem! Das Script verwendet
ON CONFLICT DO NOTHING - Die Policies werden trotzdem erstellt
Fehler: "Permission denied"
- Überprüfe ob du als authentifizierter User eingeloggt bist
- Überprüfe die Policies im Supabase Dashboard
- Führe das SQL-Script erneut aus
Fehler: "File too large"
- Stelle sicher, dass die Datei kleiner als 10MB ist
- Die Validierung erfolgt sowohl im Frontend als auch im Backend
Bilder werden nicht in der Galerie angezeigt
- Überprüfe ob der Bucket
publicist - Überprüfe ob die
public_urlkorrekt generiert wird - Öffne die Browser-Konsole für Fehler-Logs
Alternative: UI-basiertes Setup
Falls du das SQL-Script nicht ausführen möchtest, kannst du den Bucket auch manuell im UI erstellen:
-
Storage > Create Bucket
- Name:
user-uploads - Public: ✓ Enable
- File Size Limit: 10485760 (10MB)
- Allowed MIME types: image/jpeg, image/jpg, image/png, image/webp
- Name:
-
Storage > Policies > New Policy
- Erstelle die 4 Policies manuell mit den gleichen Bedingungen wie im SQL-Script