Firestore按集合名匹配配置允许读取规则不生效问题求助
问题根源
你对Firestore安全规则的路径匹配层级存在误用:
Firestore安全规则的顶级路径结构是固定格式 match /databases/{database}/documents,这里的{database}通配符匹配的是Firestore数据库实例ID,而非集合名。你将该通配符命名为collectionName属于完全的语义错误。
默认Cloud Firestore的默认数据库ID为(default),因此你写的条件collectionName=="metadata"永远为假,所有读请求都会被拒绝;当你换成!=运算符时,条件永远为真,自然所有集合的读请求都会被放行,和你观察到的现象完全一致。
正确规则写法
如果要仅开放metadata集合(包含其下所有子集合)的读权限,正确规则如下:
service cloud.firestore { match /databases/{database}/documents { // 匹配metadata集合下的所有文档,包含子集合层级的文档 match /metadata/{document=**} { allow read: if true; } // 其余所有资源默认拒绝,无需额外声明 } }
如果不需要开放metadata下的子集合读权限,只需将{document=**}修改为{document},规则就只会匹配metadata集合的一级文档。
测试注意事项
在规则playground测试时,选择读操作、路径填写/metadata/status即可匹配到上述规则,正常通过校验。
内容的提问来源于stack exchange,提问作者Eight Rice
相关产品推荐
相关产品推荐

