首页 > 解决方案 > Firestore 安全规则 - 通配符集合名称?

问题描述

我有一组名称都以 ABC 开头的集合,我想编写一个适用于所有集合的规则,而不管 ABC 后面是什么。就像是:

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

这可能吗?在规则控制台中,没有突出显示语法错误,但模拟器不允许我通过以下方式访问表:

GET /ABC123/456

有任何想法吗?

标签: google-cloud-firestorefirebase-security

解决方案


据我所知,目前无法匹配部分集合(或文档)名称。不过,这听起来像是一个有趣的功能请求,所以我建议提交一个功能请求

与此同时,我唯一能想到的就是匹配所有集合,然后通过以下方式测试路径resource['__name__']

match /53829635/{document} {
  match /{col}/{doc} {
    allow read: if resource['__name__'][5].matches('ABC.*')
  }
}

resource['__name__']表达式返回 a Path,它可以作为数组的索引来获取路径段。它有一个 form /databases/(default)/documents/collection/document,所以子集合在索引 5 处。因为这只是一个字符串,我们可以matches在它上面使用。在这种情况下,我允许从任何名称以ABC.


更新:事实证明,您也可以简单地访问col通配符,而不是从路径中查找。所以这将是相同的:

allow read: if col.matches('ABC.*')

推荐阅读