Я думаю, что создание и обновление работает, потому что они являются частью записи, и условие 1 охватывает это.
тоящее время я пытаюсь создать небольшое приложение на базе Firebase, чтобы оценить его. Это выглядит интересно и супер продуктивно, но у меня есть одна проблема с правилами пожарного депо.
У меня есть одна коллекция (игры) с объектами, похожими на это:
{
"name":String,
"description":String,
"owners":
{
"uid": String
"uid2": String
}
}
И правила установлены так:
service cloud.firestore {
match /databases/{database}/documents {
match /games {
match /{game} {
allow write: if request.auth != null && request.resource.data.owners[request.auth.uid] == 'ADMIN';
allow update: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';
allow read: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';
}
}
}
}
Пока пишешь, обновления работают нормально. Работы только для чтения для отдельных документов. Когда я пытаюсь прочитать коллекцию, я получаю ошибку доступа, как если бы пользователь не имел на нее права. Часть, которая заставляет это не работать,
resource.data.owners[request.auth.uid] == 'ADMIN'.
Добавлениеwhere("owners."+auth.uid,"==", 'ADMIN')
к коллекции запросов тоже не помогает.
Что я здесь не так делаю? Есть ли предлагаемый подход в пожарном депо пожарной базы для подобного сценария?
РЕДАКТИРОВАТЬ: я попытался добавить правила «получить» и «список», как это:
allow list: if request.auth != null;
allow get: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';
Это не сработало, как ожидалось. Я ожидал, что это позволит мне перечислить документы сwhere
но если есть документ, который я не могget
Я ожидал получить «Отсутствует или недостаточно разрешений». Что я смог сделать, так это перечислить ВСЕ документы, но не читать некоторые из них напрямую (get
правило работает при попытке извлечь отдельный документ, но не при выводе их из коллекции).
РЕДАКТИРОВАТЬ 2: Похоже, в соответствии с @MikeMcDonald мои ожидания были верны, но в настоящее время он прослушивается. Жду исправления.
РЕДАКТИРОВАТЬ 3: Теперь он работает нормально с правилами, чтобы получить и установить список следующим образом:
allow get, list: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';