所以我有一个简单的数据库,我想做一个简单的规则,但由于某种原因,它不想匹配我的集合
service cloud.firestore {
match /databases/{database}/documents {
match /userPrivate/{user=**} {
allow read, write: if request.auth.uid == user;
}
}
}
您没有指定要正确获取的文档。在要求您提供文档位置的文本框中,请勿添加/databases/(default)/documents
。这是自动添加的。您应该使用集合和文档ID指定文档的路径。例如:/userPrivate/uid
其中“uid”是文档ID。您可能还应该在模拟器中启用身份验证,以便匹配ID。
还要记住,当你使用像/userPrivate/{user=**}
这样的两颗星的通配符匹配时,user
变量将包含文档的整个路径,包括任何子集合。这意味着您的规则不适用于子集合中的文档。
您需要按如下方式调整规则:
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分钟开始的部分。