Правило Firestore на UID не работает по неизвестной причине - PullRequest
0 голосов
/ 14 апреля 2020

В моих документах есть поле «владелец», позволяющее читать документ только владельцу, и только новый документ, в котором поле «владелец» является идентификатором пользователя, может быть написано:

allow read: if request.auth.uid == resource.data.owner; allow create, write : if request.auth.uid == request.resource.data.owner;

Правило создания и обновления работает, как и ожидалось! Я проверил и увидел, что если поле «владелец» записи в новых данных не является UID пользователя, то оно не работает!

Проблема в разделе «чтение». Я не мог читать записи. Только когда я сменил на allow read: request.auth.uid != null, я смог читать. Я трижды проверил, что записи имеют поле «владелец», которое точно такое же, как и UID, также в отладке.

У меня есть опыт работы с Firebase, и я не знаю, в чем здесь проблема.

1 Ответ

1 голос
/ 14 апреля 2020

Поскольку вы указываете, что «[Вы не] смогли прочитать запись s » (с S в записях), ваша проблема, скорее всего, связана с тем, что правила безопасности не являются фильтрами , как описано в документации :

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

Вы не показываете запрос, используемый для чтения документов Firestore, но давайте представим, что ваши документы находятся в коллекции с именем collection.

С запросом типа

query = db.collection("collection")
query.get().then(....);

вы запрашиваете независимо от идентификатора пользователя Отсюда и проблема.

Вам необходимо адаптировать свой запрос с помощью метода where() следующим образом:

//get the value of uid
query = db.collection("cities").where("owner", "==", uid)
query.get().then(....)
...