Firebase 为什么云firestore规则与我的路径模式不匹配?
所以我有一个简单的数据库,我想制定一个简单的规则,但出于某种原因,它不想匹配我的集合Firebase 为什么云firestore规则与我的路径模式不匹配?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,所以我有一个简单的数据库,我想制定一个简单的规则,但出于某种原因,它不想匹配我的集合 您需要调整规则,如下所示: service cloud.firestore { match /databases/{database}/documents { match /userPrivate/{user} { allow read, write: if request.auth.uid == user; } } } 您的通配符必须指向一个单路径文档(这是您通过
您需要调整规则,如下所示:
service cloud.firestore {
match /databases/{database}/documents {
match /userPrivate/{user} {
allow read, write: if request.auth.uid == user;
}
}
}
您的通配符必须指向一个单路径文档(这是您通过{user}
获得的),并且与userPrivate
集合下的任何文档都不匹配(这是您通过{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官方视频,尤其是从5分钟开始的部分。您没有指定要正确获取的文档。在询问文档位置的文本框中,不要添加
/databases/(default)/documents
。这是为您自动添加的。您应该使用集合和文档id指定文档的路径。例如:/userPrivate/uid
,其中“uid”是文档id。您可能还应该在模拟器中启用身份验证,以便匹配id
还要记住,当您使用带有两颗星的通配符匹配时,例如
/userPrivate/{user=**}
,则user
变量将包含文档的整个路径,包括任何子集合。这意味着您的规则将不适用于子集合中的文档。您确定OP实际上不想保护userPrivate集合下组织的所有文档,包括子集合中的所有文档吗?您的提案没有做到这一点。@DougStevenson您是对的,我不是100%确定OP要求,因此我没有涵盖子集合的情况。。。我已经修改了我的回答以涵盖这个案例。谢谢你指出这一点。@ditoslav嗨,你有机会尝试一下建议的答案吗?
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;
}
}
}
}