rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { function signedIn() { return request.auth != null; } function isAdmin() { return signedIn() && exists( /databases/$(database)/documents/admins/$(request.auth.uid) ) && get( /databases/$(database)/documents/admins/$(request.auth.uid) ).data.active == true; } match /admins/{uid} { allow read: if signedIn() && request.auth.uid == uid; allow write: if false; } match /users/{userId} { allow read, write: if ( signedIn() && request.auth.uid == userId ) || isAdmin(); match /{document=**} { allow read, write: if ( signedIn() && request.auth.uid == userId ) || isAdmin(); } } match /posts/{postId} { allow read: if signedIn(); allow create: if signedIn() && request.resource.data.authorUid == request.auth.uid; allow update, delete: if isAdmin() || ( signedIn() && resource.data.authorUid == request.auth.uid ); } match /comments/{commentId} { allow read: if signedIn(); allow create: if signedIn() && request.resource.data.authorUid == request.auth.uid; allow update, delete: if isAdmin() || ( signedIn() && resource.data.authorUid == request.auth.uid ); } match /reports/{reportId} { allow create: if signedIn(); allow read, update, delete: if isAdmin(); } } }