Является ли ‘match /{document = **}’ необходимым для обеспечения безопасности firebase

#firebase #google-cloud-firestore #firebase-security

# #firebase #google-cloud-firestore #firebase-безопасность

Вопрос:

Это было мое первоначальное правило безопасности firebase:

 service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
        match /users/{userId} {
            allow read, write: if request.auth.uid == userId;
      }
    }
  }
}
 

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

Я изменил его на следующий и удалил match /{document=**} .

 service cloud.firestore {
  match /databases/{database}/documents {
        match /users/{userId} {
            allow read, write: if request.auth.uid == userId;
      }
  }
}
 

Это работает, но мой вопрос в том, было /{document=**} ли необходимо совпадение? Что именно сделала эта строка?

Комментарии:

1. Вероятно, вам будет интересно посмотреть следующее официальное видео о правилах безопасности: youtube.com/watch?v=eW5MdE3ZcAw

Ответ №1:

match /{document=**} соответствует всем документам во всей базе данных. Подстановочный знак там фактически «поглощает» весь путь к документу с целью дальнейшего сопоставления. Вы также вложили match /users/{userId} под ним, что на самом деле не имеет никакого значения (поскольку вы не можете вложить больше документов в самый внешний документ).

Ваш второй пример работает, потому что вы сопоставляете пользователей на верхнем уровне, а не вложены ни во что другое.

Обычно вы вкладываете совпадения только тогда, когда хотите написать одно правило, которое сопоставляет документы в коллекции, и другое правило, которое сопоставляет документы в этой вложенной коллекции. Это может сэкономить немного времени при вводе текста.