【问题标题】:Firestore security rules - wildcarding Collection Names?Firestore 安全规则 - 通配符集合名称?
【发布时间】:2018-12-18 09:11:17
【问题描述】:
我有一组名称都以 ABC 开头的集合,我想编写一个适用于所有集合的规则,无论 ABC 后面是什么。比如:
match /ABC*/{anyid} {
allow read, write;
}
这可能吗?在规则控制台中,没有突出显示语法错误,但模拟器不允许我访问该表:
GET /ABC123/456
有什么想法吗?
【问题讨论】:
标签:
google-cloud-firestore
firebase-security
【解决方案1】:
据我所知,目前无法匹配部分集合(或文档)名称。这听起来像是一个有趣的功能请求,所以我推荐filing a feature request。
与此同时,我唯一能想到的就是匹配所有集合,然后通过resource['__name__']测试路径:
match /53829635/{document} {
match /{col}/{doc} {
allow read: if resource['__name__'][5].matches('ABC.*')
}
}
resource['__name__'] 表达式返回一个Path,它可以作为数组的索引来获取路径段。它有一个/databases/(default)/documents/collection/document 的形式,因此子集合在索引5 处。由于这只是一个字符串,我们可以在其上使用matches。在这种情况下,我允许从名称以 ABC 开头的任何子集合中读取。
更新:事实证明,您也可以简单地访问col 通配符,而不是从路径中查找。所以这也是一样的:
allow read: if col.matches('ABC.*')