У меня могут быть некоторые проблемы с синтаксисом правил безопасности пожарного депо, потому что я думаю, что логика, лежащая в основе структуры моей базы данных, правильная, а также правила безопасности должны быть правильными.
Итак, структура выглядит следующим образом. У меня есть коллекция «пользователей», они либо покупатели, либо продавцы (о часах говорят). И есть коллекция "часов". Внутри часов продавцы могут создавать документы, которые содержат данные о часах, а также идентификатор продавца.
Документ внутри "watches" имеет вложенную коллекцию под названием "status". Внутри «статуса» находится один документ, в этом документе есть поле, которое также называется «статус», его значение равно 0 или 1, 0 означает, что он доступен (для покупки), а 1 означает, что он кем-то зарезервирован. Правила безопасности: только создатель контрольного документа может изменить этот документ, и (любой) покупатель может изменить статус, только если статус был 0.
Я думал, что следующее должно сделать работу
service cloud.firestore {
match /databases/{database}/documents {
match /users/{$uid} {
allow read, update: if request.auth.uid == $uid;
}
match /watches/{watchId} {
allow read: if true;
allow update: if request.resource.data.sellerId == request.auth.uid;
match /status/{statusId} {
allow read: if true;
allow update: if request.resource.data.status == 0 && request.auth != null;
}
}
}
}
Я провел несколько симуляций, но это никогда не позволяло мне вносить изменения в статус (я вошел в систему, и статус был 0). Что-то не так с кодом?