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();
}
}
}