diff --git a/firestore.rules b/firestore.rules new file mode 100644 index 0000000..33e1021 --- /dev/null +++ b/firestore.rules @@ -0,0 +1,35 @@ +rules_version = '2'; +service cloud.firestore { + match /databases/{database}/documents { + + // News / Neuigkeiten: Öffentlich lesbar, Schreiben für angemeldete Nutzer + match /News/{document=**} { + allow read: if true; + allow write: if request.auth != null; + } + + // Mängel & Anliegen: Öffentlich lesbar, Erstellen angemeldet, Löschen nur eigener Autor + match /Issues/{document} { + allow read: if true; + allow create: if request.auth != null; + allow update: if request.auth != null; + allow delete: if request.auth != null && + (resource.data.author_uid == request.auth.uid); + } + + // Bürgerforum / Ideen: Öffentlich lesbar, Erstellen angemeldet, Löschen eigener Autor + match /CitizensForum/{document} { + allow read: if true; + allow create: if request.auth != null; + allow update: if request.auth != null; + allow delete: if request.auth != null && + (resource.data.author_uid == request.auth.uid); + } + + // Kontakt-Nachrichten: Jeder kann einsenden, Lesen nur berechtigte Nutzer + match /ContactMessages/{document} { + allow create: if true; + allow read, update, delete: if request.auth != null; + } + } +} diff --git a/storage.rules b/storage.rules new file mode 100644 index 0000000..3a7f476 --- /dev/null +++ b/storage.rules @@ -0,0 +1,19 @@ +rules_version = '2'; +service firebase.storage { + match /b/{bucket}/o { + + // Fotos von News, Mängeln und Ideen + match /{collection}/{userId}/{fileName} { + // Jeder darf Bilder in der App laden/ansehen + allow read: if true; + + // Nur angemeldete Nutzer dürfen Fotos hochladen (max. 10 MB, nur Bilder) + allow create, update: if request.auth != null + && request.resource.size < 10 * 1024 * 1024 + && request.resource.contentType.matches('image/.*'); + + // Nur der Verfasser (oder berechtigte Nutzer) darf sein Foto löschen + allow delete: if request.auth != null && request.auth.uid == userId; + } + } +}