Является ли 'match / {document = **}' необходимым для обеспечения безопасности базы данных - PullRequest
0 голосов
/ 17 апреля 2019

Это было мое первоначальное правило безопасности 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 Ответ

0 голосов
/ 17 апреля 2019

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

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

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

...