【发布时间】:2020-02-25 02:54:21
【问题描述】:
我在尝试配置 Cloud Firestore 规则时遇到了一些麻烦。
我正在尝试访问文档、集合中的字段...就像这样
Future<void> fetchAndSetProducts([bool filterByUser = false]) async {
final filterString = filterByUser
? Firestore.instance.collection('products').getDocuments()
: Firestore.instance
.collection('products')
.where('creatorId', isEqualTo: userId)
.getDocuments();
try {
QuerySnapshot prodSnap = await filterString;
if (prodSnap == null) {
return;
}
'creatorId' 是 database/products/{productId} 中的一个字段
我想区分用户,只允许他们更新和删除他们在 database/products/... 中创建的文件,但我也希望他们能够查看 /products/ 中的所有文档...
我为 fetchAndSetProducts 设置的布尔值是我希望用来过滤一些信息应用端的,例如仅允许使用查看某些产品(包含其用户 ID 的产品)。我不确定我是否还需要为“产品”设置索引,但我已经这样做了,以防万一。
所以,我想锁定所有不是由用户创建的文件。
我以为会是这样的:
service cloud.firestore {
match /databases/{database}/documents {
match /products/{productId}/documents{
allow read: if resource.data.creatorId == request.auth.uid;
}
}
}
buuut 不起作用,我的应用程序端代码也无法按用户过滤..
【问题讨论】:
-
请编辑问题以解释什么不是按您预期的方式工作,包括您已调试并确定它在做什么的客户端代码。
标签: firebase google-cloud-platform google-cloud-firestore firebase-security