为什么云firestore规则不匹配我的路径模式?

问题描述 投票:0回答:2

所以我有一个简单的数据库,我想做一个简单的规则,但由于某种原因,它不想匹配我的集合

enter image description here

service cloud.firestore {
  match /databases/{database}/documents {

    match /userPrivate/{user=**} {
      allow read, write: if request.auth.uid == user;
    }

  }
}

enter image description here

enter image description here

firebase google-cloud-firestore firebase-security-rules
2个回答
0
投票

您没有指定要正确获取的文档。在要求您提供文档位置的文本框中,请勿添加/databases/(default)/documents。这是自动添加的。您应该使用集合和文档ID指定文档的路径。例如:/userPrivate/uid其中“uid”是文档ID。您可能还应该在模拟器中启用身份验证,以便匹配ID。

还要记住,当你使用像/userPrivate/{user=**}这样的两颗星的通配符匹配时,user变量将包含文档的整个路径,包括任何子集合。这意味着您的规则不适用于子集合中的文档。


0
投票

您需要按如下方式调整规则:

service cloud.firestore {
  match /databases/{database}/documents {

    match /userPrivate/{user} {
      allow read, write: if request.auth.uid == user;
    }

  }
}

你的通配符必须指向单个路径文档(这是你通过{user}获得的)并且不匹配userPrivate集合下的任何文档(这是你通过{user=**},换句话说“其余的路径”得到的) )。

如果您希望允许用户以相同的安全级别读取/写入user文档的子集合中包含的所有文档,则以下规则将起到作用:

service cloud.firestore {
  match /databases/{database}/documents {

    match /userPrivate/{user} {
      allow read, write: if request.auth.uid == user;

      match /{userCollec=**} {
        allow read, write: if request.auth.uid == user;
      }

    }

  }
}

我建议你在Firestore安全规则上观看官方Firebase视频:https://www.youtube.com/watch?v=eW5MdE3ZcAw&,特别是从5分钟开始的部分。

© www.soinside.com 2019 - 2024. All rights reserved.