我有一组名称都以ABC开头的集合,我想写一条适用于所有集合的规则,无论ABC后面是什么。像这样:
match /ABC*/{anyid} {
allow read, write;
}
这可能吗?在“规则控制台”中,没有突出显示语法错误,但是模拟器不允许我使用以下命令访问表:
GET /ABC123/456
有什么想法吗?
答案 0 :(得分:4)
据我所知,当前无法在部分集合(或文档)名称上进行匹配。尽管这听起来像是一个有趣的功能请求,所以我建议使用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.*')