Я думаю, что создание и обновление работает, потому что они являются частью записи, и условие 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';

Ответы на вопрос(1)

Ваш ответ на вопрос