#firebase #google-cloud-firestore #firebase-security
# #огневая база #google-облако-firestore #firebase-безопасность
Вопрос:
В Firestore у меня есть коллекция как «пользователи», а идентификатор документа — это случайные числа.
Теперь мне нужно разрешить пользователям читать документы, содержащие поле friend : true
Я попробовал следующие правила :
match /users/{document=**}
{
allow read : if request.resource.data.friend = true;
}
match /users/{document=**}
{
allow read : if resource.data.friend = true;
}
Но все же я не могу прочитать документы, которые содержат friend = true .
Пожалуйста, помогите мне
Комментарии:
1. Правила безопасности сами по себе ничего не делают. Они вступают в силу только в сочетании с запросом, который их запускает. Пожалуйста, отредактируйте вопрос, чтобы показать код приложения, который работает не так, как вы ожидаете, в соответствии с этими правилами.
Ответ №1:
Мое первое предположение заключается в том, что вы не передаете одно и то же условие с операцией чтения. Имейте в виду, что правила безопасности Firebase не фильтруют данные. Вместо этого они «просто» гарантируют, что операция чтения разрешена. Итак, вторые правила в вашем фрагменте разрешают этот запрос:
firebase.firestore().collection("users").where("friend", "=", true)
Если вы не передадите where
условие, чтение будет отклонено, поскольку вы пытаетесь прочитать все документы, что не разрешено правилами безопасности. Только когда запрос и правила совпадают, чтение будет разрешено.
Ваш первый фрагмент правил не может работать в любом случае, так как request.resource
имеет значение только в контексте операций записи. Из документов:
request.resource
Новое значение ресурса, присутствующее только при запросах на запись.
Комментарии:
1. Вау, точно, вы правы. Это сработало так, как мне было нужно. Большое спасибо.