如何在Firebase安全规则中使用通配符

时间:2019-06-16 13:03:41

标签: firebase google-cloud-firestore firebase-security-rules

我正在尝试在我的Firebase安全规则中使用通配符,但是它不能像在线文档中描述的那样工作。 enter image description here

我想返回整个itineraryList集合,但是安全规则不起作用。

match /itinerary/{userId=**}/itineraryList/{doc} {
  allow read: if request.auth.uid == userId; 
  allow write: if request.auth.uid == userId;
}

在这里,经过身份验证的用户可以访问整个列表的正确语法是什么?

1 个答案:

答案 0 :(得分:2)

根据您的评论进行更新:

如果您想授予任何经过身份验证的用户对itinerary集合(包括子集合)下的所有文档的读取权限,请执行以下操作:

service cloud.firestore {
  match /databases/{database}/documents {
      match /itinerary/{docId=**} {
          allow read: if request.auth.uid != null;
      }   

      //possibly add another rule for write

  }
}

初始答案:

这是因为通过执行{userId=**}您正在使用“ 递归通配符语法”,请参见https://firebase.google.com/docs/firestore/security/rules-structure#recursive_wildcards。它将对应于“整个匹配路径段”。

您应该这样做:

service cloud.firestore {
  match /databases/{database}/documents {
      match /itinerary/{userId}/itineraryList/{doc} {
        allow read: if request.auth.uid == userId; 
        allow write: if request.auth.uid == userId;
      }  
  }
}

您还可以观看有关Firestore安全规则的Firebase官方视频,其中解释了这一点,以及其他内容:https://www.youtube.com/watch?v=eW5MdE3ZcAw