# #firebase #google-cloud-firestore #firebase-security
Вопрос:
Я новичок в firestore и его правилах безопасности, поэтому приношу извинения, если это звучит глупо. У меня есть 3 коллекции, данные, роли и требования к обучению. В ролях я сохраняю идентификатор пользователя вместе с его именем и ролью, как показано на прикрепленном изображении. Что я хотел сделать, так это предоставить доступ для чтения и записи только в том случае, если роль пользователя является «внешней». Итак, для этой цели я написал следующее правило:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /trainingRequests/{tId} {
allow read, write: if get(/databases/$(database)/documents/roles).data[request.auth.uid].role == "external"
}
}
}
Но это совсем не работает. Итак, я хотел знать, что я делаю неправильно и как правильно написать правило для этой цели.
Я знаю, что пользовательские утверждения-лучший подход, но я все равно хочу попробовать это.
Ответ №1:
Вам нужно передать методу путь к документу get()
.
С
get(/databases/$(database)/documents/roles)
на самом деле вы проходите roles
путь сбора.
Следующее должно сделать свое дело:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /trainingRequests/{tId} {
allow read, write: if get(/databases/$(database)/documents/roles/$(request.auth.uid)).data.role == "external"
}
}
}
get()
Метод возвращает rules.firestore.Resource
значение, для которого вы вызываете data
свойство, возвращающее карту данных документа.
Более подробную информацию и примеры вы найдете в документе.