首页 > 解决方案 > Firebase / Cloud Firestore / 规则设置(读取、写入、更新、删除)

问题描述

我在尝试配置 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 不起作用,我用于按用户过滤的应用程序端代码也不起作用。

标签: firebasegoogle-cloud-platformgoogle-cloud-firestorefirebase-security

解决方案


如果你想匹配 products 集合中的所有文档,它看起来像这样:

service cloud.firestore {
  match /databases/{database}/documents {
    match /products/{productId} {
      allow read: if resource.data.creatorId == request.auth.uid;
    }
  }
}

请注意,我从第二场比赛的末尾删除了“文档”。


推荐阅读