В последнее время я много читал о пожарном магазине, но все еще борюсь с одной вещью.
У меня есть документы Story в моем пожарном магазине:
story: {
name: 'James',
members: {
'WeWF34RFD23RF23': 'viewer'
}
}
свойство members в этом документекарта, в которой ключ равен uid, а значение - роль пользователя.
Я использую AngularFireAuth для аутентификации и AngularFirestore для запроса базы данных.
ПРОБЛЕМА
Когда я запрашиваю документыЯ получаю сообщение об ошибке разрешения, даже если я запрашиваю только документы, у меня есть права на чтение.
constructor(private db: AngularFirestore, private fAuth: AngularFireAuth) {
this.collection = db.collection<StoryId>('story', ref => ref.where('name', '==', 'James'));
}
ngOnInit() {
this.stories$ = this.collection.snapshotChanges().pipe( ... )
}
Может быть несколько историй о Джеймсе, и у каждого из них есть свой uid на карте членов.Есть также истории, которые имеют другое имя и не имеют моего идентификатора на карте участников.По этому запросу я хочу получить все истории о Джеймсе, что приводит к ошибке, но когда я запрашиваю один документ ('story / {story_id}'), все работает нормально.
Вот мои правила безопасности
service cloud.firestore {
match /databases/{database}/documents {
match /story/{story} {
allow read: if request.auth.uid in resource.data.members;
allow create;
}
}
}
Может быть, проблема в том, что когда AngularFirestore запрашивает коллекцию, ей нужны права доступа ко всей коллекции, чтобы возвращать только те значения, к которым я могу получить доступ?Если да, как я могу получить только те документы, к которым у меня есть права доступа?