Как получить другое правило для определенной коллекции c в firebase firestore - PullRequest
0 голосов
/ 27 марта 2020

У меня есть база данных Firestore, для всех коллекций, которые я хочу иметь ниже правила

    allow read : if request.auth.uid != null ;
    allow write: if request.auth.uid != null ;

, кроме коллекции service-account, к которой я не хочу, чтобы у кого-то был доступ (только функции firebase, так как они выполняется под учетной записью службы администратора), поэтому я обновил свои правила до

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    match /{document=**} {
        allow read : if request.auth.uid != null ;
      allow write: if request.auth.uid != null ;
    }

    match /service-account/{serviceAccount} {
      allow read: if false;
      allow write:  if false;
    }

  }
}

Затем я попытался проверить это с помощью Rules Play Ground, правила учитываются, но результат неверен

enter image description here

Так что мое правило правильно запрещает доступ, но первое правило, которое будет применяться ко всем, похоже, разрешает чтение. Я изменил порядок и без различий.

Как я могу это исправить.

1 Ответ

1 голос
/ 27 марта 2020

Проблема заключается в том, что это правило безоговорочно применяется к каждому отдельному документу в вашей базе данных:

    match /{document=**} {
      allow read : if request.auth.uid != null ;
      allow write: if request.auth.uid != null ;
    }

При этом все документы доступны для чтения и записи всем пользователям. Вы не можете переопределить это с другим правилом. Если документ считается читаемым по какому-либо правилу, его нельзя изменить.

См. Документацию для перекрывающихся операторов сопоставления .

Что вам нужно будет сделать вместо этого Вызывает каждую отдельную коллекцию по ее имени (кроме сервис-аккаунта) и применяет права доступа к ним индивидуально.

...