У меня недостаточно прав для проверки безопасности пожарного депо.
service cloud.firestore
{
match /databases/{database}/documents
{
match /events/{eventID}
{
allow read:
if get(/databases/$(database)/documents/events/$(eventID)/authorizations/$(request.auth.uid)).data.EVENT_READ == true;
}
}
}
документ get жестко закодирован в базе данных firestore, и симулятор возвращает true, но для фактического запроса возвращает недостаточные привилегии.
Я протестировал и переместил подколлекцию авторизаций на тот же уровень, что и коллекция пользователей, и это работает. Я что-то упускаю?
Дополнительное тестирование: непосредственное чтение документа не приводит к недостаточным привилегиям. Я тестирую, чтобы убедиться, что это проблема с листингом, но, насколько мне известно, read должен охватывать как get , так и list в правилах безопасности firestore.
Обновление: похоже, проблема в списках. Я попытался перечислить всю коллекцию только с одним документом, и это привело к недостаточным привилегиям.
Работает:
this.angularFirestore.collection('events').doc(eventID).valueChanges();
Не работает (обновлено):
this.angularFirestore.collection('events', query => query.where('admins', 'array-contains', auth.uid)).valueChanges()
Моя база данных пожарного магазина:
/events/event1_id
- field 1: some string
- field 2: some string
- admins: array of uid strings
/authorizations/<uid> #uid for $(request.auth.uid)
- EVENT_READ: true
Обновление 2: обновлена неработающая строка запроса, которую я опробовал. Интересно, что если я переместу подколлекцию / authorizations на тот же уровень, что и коллекции / events, запрос не будет завершен неудачей.