Firebase 错误:在无服务器应用中"Missing or insufficient permissions."子集合查询



我正在测试从我的无服务器角度应用程序部署的子集合查询。我有一个顶级lvl集合User(2个子文档(,它有一个嵌套的集合秘密,每个秘密都包含一个文档索引的contact_details(对于两个用户(
对于firestore规则,我使用

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

在我的angular无服务器客户端上,我使用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

在消防仓库规则模拟器中,我已经成功地尝试查询:

get /user/(placeholder)/secret/contact_details

此外,我还测试了使用私有服务器(node.js(设置的子集合查询,该服务器按预期工作。我想我的安全规则已经失效,但我无法弄清楚到底是什么问题,因为我根据文档修改了消防商店规则。我感谢任何帮助!

在尝试了一点之后,我得出结论,子集合查询规则必须首先以路径通配符开始,如:

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

禁止将它们嵌套在我以前尝试过的路线上:

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

通过这些改变,我得到了预期的结果。

相关内容

最新更新