Как разрешить всем пользователям читать только определенные документы с полем » друг : true «

#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. Вау, точно, вы правы. Это сработало так, как мне было нужно. Большое спасибо.