Files
braidsbymira/firestore.rules

54 lines
1.7 KiB
Plaintext

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isAdmin() {
return request.auth != null && request.auth.uid == "dev-admin-placeholder-uid";
}
match /products/{productId} {
allow read: if true;
allow write: if isAdmin();
}
match /services/{serviceId} {
allow read: if true;
allow write: if isAdmin();
}
match /scheduleTemplate/{docId} {
allow read: if true;
allow write: if isAdmin();
}
match /scheduleExceptions/{date} {
allow read: if true;
allow write: if isAdmin();
}
match /bookedSlots/{date} {
allow read: if true;
allow write: if isAdmin();
}
match /bookings/{bookingId} {
allow create: if request.resource.data.keys().hasAll(['serviceId', 'date', 'time', 'contact', 'status'])
&& request.resource.data.date is string
&& request.resource.data.date.matches('^[0-9]{4}-[0-9]{2}-[0-9]{2}$')
&& request.resource.data.time is string
&& request.resource.data.contact is map
&& request.resource.data.contact.keys().hasAll(['name', 'phone', 'email', 'notes'])
&& request.resource.data.status is string;
allow read, update, delete: if isAdmin();
}
match /inquiries/{inquiryId} {
allow create: if request.resource.data.keys().hasAll(['productId', 'contact', 'status'])
&& request.resource.data.productId is string
&& request.resource.data.contact is map
&& request.resource.data.contact.keys().hasAll(['name', 'email', 'notes'])
&& request.resource.data.status is string;
allow read, update, delete: if isAdmin();
}
}
}