#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}
под ним, что на самом деле не имеет никакого значения (поскольку вы не можете вложить больше документов в самый внешний документ).
Ваш второй пример работает, потому что вы сопоставляете пользователей на верхнем уровне, а не вложены ни во что другое.
Обычно вы вкладываете совпадения только тогда, когда хотите написать одно правило, которое сопоставляет документы в коллекции, и другое правило, которое сопоставляет документы в этой вложенной коллекции. Это может сэкономить немного времени при вводе текста.