Firestore安全规则-通配符集合名称?

时间:2018-12-18 09:11:17

标签: google-cloud-firestore firebase-security-rules

我有一组名称都以ABC开头的集合,我想写一条适用于所有集合的规则,无论ABC后面是什么。像这样:

match /ABC*/{anyid} {
  allow read, write;
}

这可能吗?在“规则控制台”中,没有突出显示语法错误,但是模拟器不允许我使用以下命令访问表:

GET /ABC123/456

有什么想法吗?

1 个答案:

答案 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.*')