google-cloud-firestore - Firestore 安全规则 - 通配符集合名称?
问题描述
我有一组名称都以 ABC 开头的集合,我想编写一个适用于所有集合的规则,而不管 ABC 后面是什么。就像是:
match /ABC*/{anyid} {
allow read, write;
}
这可能吗?在规则控制台中,没有突出显示语法错误,但模拟器不允许我通过以下方式访问表:
GET /ABC123/456
有任何想法吗?
解决方案
据我所知,目前无法匹配部分集合(或文档)名称。不过,这听起来像是一个有趣的功能请求,所以我建议提交一个功能请求。
与此同时,我唯一能想到的就是匹配所有集合,然后通过以下方式测试路径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.*')
推荐阅读
- python - 是否可以使用 StreamingHttpResponse 生成 PDF,因为可以使用 CSV 来生成大型数据集?
- r - tq_index 错误,它创建一个 excel 文件?
- java - 双精度值不能转换为布尔值
- gradle - 从命令行运行 gradlew build 时确定构建风格
- python - 无法通过单击快捷方式启动 jupyter notebook
- sql-server - 如何通过完成其他 sql 作业来启动 sql 作业?
- powerbi - 如何在指定的过滤器上下文中返回度量的最小值/最大值?
- kubernetes - Kubernetes 入口不工作,默认后端 404
- java - 我应该如何使用 JAVA 在 Android Studio 中创建圆形图像视图
- html - 调整窗口大小时防止 div 块偏移