Я создаю менеджер контактов, в котором у пользователя есть куча «контактов» в его адресной книге. Я только хочу, чтобы пользователь, создавший контакт, мог запросить этот контакт. Я написал запрос ниже, который говорит, что я хочу, чтобы он делал, но запрос не работает, и я не знаю почему.
Все контакты создаются с полем owner_id
, которое соответствует uid
пользователя, создавшего контакт.
service cloud.firestore {
match /databases/{database}/documents {
match /contacts/{contactId} {
// only allow read for contacts if the current user is the owner
allow read: if request.auth.uid == resource.data.owner_id // <-- this does not work
allow write: if request.auth.uid != null && request.resource.data.owner_id != null;
}
}
}
Когда я запускаю запрос, я ничего не получаю обратно, и симулятор не позволяет мне выполнять запросы на list
запросах для всей коллекции, только get
для одного документа. Запрос просто:
db.collections('contacts')
Я также пытался ограничить использование выражения where:
db.collections('contacts').where('owner_id', '==', <hard-coded-owner-id>)
Я должен отметить, что когда я запрашиваю один документ, приведенный выше синтаксис действительно работает. Похоже, что он не работает, когда я запрашиваю коллекцию.
Итак, мой вопрос: как написать правило базы данных, чтобы я мог перечислить все элементы в коллекции, возвращая только те элементы, которые связаны с вошедшим в систему пользователем?
https://firebase.google.com/docs/firestore/security/get-started