Firestore Rules
rules_version = '2';
service cloud.firestore {
match /databases/{db}/documents {
function isAdmin() {
return request.auth != null &&
exists(/databases/$(db)/documents/admins/$(request.auth.uid));
}
function me(uid) { return request.auth != null && request.auth.uid == uid; }
match /admins/{uid} {
allow read: if me(uid);
allow write: if false;
}
match /settings/{d} { allow read: if true; allow write: if isAdmin(); }
match /products/{d} { allow read: if true; allow write: if isAdmin(); }
match /banners/{d} { allow read: if true; allow write: if isAdmin(); }
match /publicOrders/{d} { allow read: if true; allow write: if isAdmin(); }
match /users/{uid} {
allow read: if me(uid) || isAdmin();
allow create: if me(uid)
&& request.resource.data.points <= 10
&& request.resource.data.wallet == 0;
allow update: if isAdmin() || (me(uid)
&& request.resource.data.wallet == resource.data.wallet
&& request.resource.data.points <= resource.data.points);
}
match /orders/{id} {
allow create: if me(request.resource.data.uid)
&& request.resource.data.status == 'pending';
allow read: if isAdmin() || me(resource.data.uid);
allow update, delete: if isAdmin();
}
match /commissions/{id} {
allow read: if isAdmin() || me(resource.data.to);
allow write: if isAdmin();
}
match /chats/{cid} {
allow read, write: if me(cid) || isAdmin();
match /messages/{m} { allow read, write: if me(cid) || isAdmin(); }
}
}
}