【问题标题】:Firestore allow read if collection name matches如果集合名称匹配,Firestore 允许读取
【发布时间】:2021-10-21 12:58:16
【问题描述】:
我正在尝试在 Cloud Firestore 中实现我认为的基本安全规则,即允许对特定集合进行读取访问。
service cloud.firestore {
match /databases/{collectionName}/documents {
match /{document=**}{
allow read : if collectionName=="metadata";
}
}
}
所以在规则游乐场中,/metadata/status 的查询被拒绝,但是,如果我将运算符切换到 != 而不是 ==,它允许对任何集合进行任何查询,而不仅仅是那些不是tmetadata。帮忙?
【问题讨论】:
标签:
firebase
google-cloud-firestore
firebase-security
【解决方案1】:
该通配符的位置不正确。 collectionName 将是数据库的名称,即 (default) 默认 数据库,因此 "(default)" == "metadata" 返回 false。尝试以下规则:
service cloud.firestore {
match /databases/{database}/documents {
match /{collectionName}/{doc}{
allow read : if collectionName == "metadata";
}
}
}
这里的collectionName 是正在访问的集合的名称。
但是,此规则将适用于所有集合。如果您只想为“元数据”集合添加该规则,则可以为此添加单独的规则:
match /metadata/{doc} {
allow read: if true;
}