【问题标题】:Firebase / Cloud Firestore / Rules Setup (read, write, update, delete)Firebase / Cloud Firestore / 规则设置(读取、写入、更新、删除)
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 不错,谢谢!它没有按预期工作,但现在是:)
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 2018-11-27
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多