leafittome/firestore.rules
cschlaefke 53ee30c598 Firestore und Auth: echte Daten statt Demo, Login mit E-Mail+Passwort, Security Rules
- Datenmodell: users/{uid}, households/{id} mit memberUids, plants/locations als Subcollections
- StreamProvider liefern Live-Daten, Repositories kapseln Schreibzugriffe
- Login-Screen mit Registrierung (legt Haushalt automatisch an), Logout in Einstellungen
- Router-Redirect bei Login/Logout, firestore.rules mit Haushalts-Prinzip
- Tests auf firebase_auth_mocks + fake_cloud_firestore umgestellt
- Verifiziert: analyze/test grün, Android-Debug-Build erfolgreich

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 22:53:09 +02:00

41 lines
1.4 KiB
Text

rules_version = '2';
// Sicherheitsregeln für LeafItToMe.
//
// Grundprinzip: Alle App-Daten hängen an einem Haushalt. Lesen und Schreiben
// darf nur, wer im Feld `memberUids` des Haushalts steht. Das eigene
// Nutzer-Dokument (users/{uid}) darf nur der Nutzer selbst sehen.
service cloud.firestore {
match /databases/{database}/documents {
function signedIn() {
return request.auth != null;
}
function isMember(householdId) {
return signedIn()
&& request.auth.uid in get(/databases/$(database)/documents/households/$(householdId)).data.memberUids;
}
// Eigenes Nutzerprofil (enthält u. a. die householdId).
match /users/{uid} {
allow read, write: if signedIn() && request.auth.uid == uid;
}
match /households/{householdId} {
// Lesen/Ändern nur für Mitglieder.
allow read, update: if signedIn() && request.auth.uid in resource.data.memberUids;
// Anlegen nur, wenn man sich selbst als Mitglied einträgt
// (passiert automatisch bei der Registrierung).
allow create: if signedIn() && request.auth.uid in request.resource.data.memberUids;
// Löschen von Haushalten ist bewusst nicht erlaubt.
allow delete: if false;
// Alle Unterdaten des Haushalts (plants, locations, ...):
// voller Zugriff für Mitglieder, niemand sonst.
match /{document=**} {
allow read, write: if isMember(householdId);
}
}
}
}