FirebaseError: «Отсутствует или недостаточно разрешений». Запросы вложенной коллекции в безсерверном приложении - PullRequest
1 голос
/ 04 ноября 2019

Я тестирую запросы подколлекции, развернутые из моего безсерверного углового приложения. У меня есть пользователь верхнего уровня коллекции lvl (2 вложенных документа) с вложенным секретом коллекции, каждый из которых содержит индексированный документ contact_details (для обоих пользователей)
Для правил пожарного депо я использую

rules_version = '2';
match /databases/{database}/documents {
   match /user/{path=**}/secret/{secret_id} {
       allow read: if true;
   }
}

И на моем угловом сервере без сервераклиент Я использую AngularFirestore для запроса секрета подколлекции следующим образом:

this.firestore.collectionGroup('secret').get().subscribe(
    (sec) => { sec.forEach(el => console.log(el.data())) },
    (error) => { console.error(error) }
);

Мое ожидаемое поведение - извлечь все документы из секрета подколлекции, вложенного в два пользовательских документа. Вывод ошибки, который я получаю из оператора console.error, выглядит следующим образом:

FirebaseError: "Missing or insufficient permissions."
FirestoreError index.cjs.js:350
fromRpcStatus index.cjs.js:15441
fromWatchChange index.cjs.js:15954
onMessage index.cjs.js:11877
startStream index.cjs.js:11806
getCloseGuardedDispatcher index.cjs.js:11846
newTail index.cjs.js:1688
invoke zone-evergreen.js:359
run zone-evergreen.js:124
scheduleResolveOrReject zone-evergreen.js:855
invokeTask zone-evergreen.js:391
runTask zone-evergreen.js:168
drainMicroTaskQueue zone-evergreen.js:559
invokeTask zone-evergreen.js:469
invokeTask zone-evergreen.js:1603
globalZoneAwareCallback zone-evergreen.js:1629

В симуляторе правил firestore, который я уже успешно попытался сделать запрос:

get /user/(placeholder)/secret/contact_details

Также я протестировал запросы подколлекциис установленным привилегированным сервером (node.js), который работал как ожидалось. Я предполагаю, что мои правила безопасности отключены, но я не могу понять, в чем именно заключается проблема, так как я изменил правила пожарного депо на основе документации. Я ценю любую помощь!

1 Ответ

0 голосов
/ 05 ноября 2019

Попробовав немного больше, я пришел к выводу, что правила запроса для подколлекции должны начинаться с подстановочного знака пути first , например:

match /{path=**}/secret/...

Это выглядит как запрет на вложениепо маршруту, который я пробовал ранее:

match /user/{path=**}/secret/...

С этими изменениями я получаю ожидаемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...