rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isAdmin() { return request.auth != null && request.auth.token.email == 'julianschroeter1702@gmail.com'; }
match /users/{uid} {
allow read, write: if request.auth != null && request.auth.uid == uid;
}
match /profiles/{uid} {
allow read: if request.auth != null;
allow write: if request.auth != null && request.auth.uid == uid;
}
match /chats/{chatId} {
allow read, update: if request.auth != null && request.auth.uid in resource.data.members;
allow create: if request.auth != null && request.auth.uid in request.resource.data.members;
match /messages/{mid} {
allow read: if request.auth != null && request.auth.uid in get(/databases/$(database)/documents/chats/$(chatId)).data.members;
allow create: if request.auth != null && request.auth.uid in get(/databases/$(database)/documents/chats/$(chatId)).data.members && request.resource.data.from == request.auth.uid;
}
}
match /groups/{gid} {
allow read: if request.auth != null;
allow create: if request.auth != null && request.resource.data.admin == request.auth.uid && request.auth.uid in request.resource.data.members;
allow delete: if request.auth != null && (resource.data.admin == request.auth.uid || isAdmin());
allow update: if request.auth != null && (
resource.data.admin == request.auth.uid || isAdmin()
|| (
request.resource.data.admin == resource.data.admin && (
(request.resource.data.members.hasAll(resource.data.members) && request.auth.uid in request.resource.data.members)
|| (resource.data.members.hasAll(request.resource.data.members) && !(request.auth.uid in request.resource.data.members))
)
)
);
match /messages/{mid} {
allow read: if request.auth != null && request.auth.uid in get(/databases/$(database)/documents/groups/$(gid)).data.members;
allow create: if request.auth != null && request.auth.uid in get(/databases/$(database)/documents/groups/$(gid)).data.members && request.resource.data.from == request.auth.uid;
}
}
match /matches/{mid} {
allow read: if request.auth != null && request.auth.uid in resource.data.players;
allow create: if request.auth != null && request.auth.uid in request.resource.data.players;
allow update: if request.auth != null && request.auth.uid in resource.data.players
&& request.resource.data.players == resource.data.players
&& (resource.data.turnUid == request.auth.uid || request.resource.data.status == 'finished');
}
match /market/{lid} {
allow read: if request.auth != null;
allow create: if request.auth != null && request.resource.data.seller == request.auth.uid;
allow update, delete: if request.auth != null && (resource.data.seller == request.auth.uid || isAdmin());
}
match /tournaments/{tid} {
allow read: if request.auth != null;
allow create: if request.auth != null && request.resource.data.host == request.auth.uid && request.auth.uid in request.resource.data.players;
allow update: if request.auth != null && (request.auth.uid in resource.data.players || request.auth.uid in request.resource.data.players || isAdmin());
allow delete: if request.auth != null && (resource.data.host == request.auth.uid || isAdmin());
}
match /reports/{rid} {
allow create: if request.auth != null && request.resource.data.reporter == request.auth.uid;
allow read, update, delete: if isAdmin();
}
}
}