我有一个火库数据库,对于我想要的所有收藏,下面的规则
allow read : if request.auth.uid != null ;
allow write: if request.auth.uid != null ;除了service-account集合,我不想让任何人访问它(只访问firebase函数,因为它们是在管理服务帐户下运行的),所以我更新了我的规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read : if request.auth.uid != null ;
allow write: if request.auth.uid != null ;
}
match /service-account/{serviceAccount} {
allow read: if false;
allow write: if false;
}
}
}然后我试着通过Rules Play Ground测试它,规则被考虑进去了,但是结果不正确

所以我的规则正确地禁止访问,但第一条规则将应用于所有人,似乎允许读取。我改变了顺序,没有差别。
我怎么才能解决这个问题。
发布于 2020-03-28 04:55:25
问题是,这个规则会无条件地应用于数据库中的每个文档:
match /{document=**} {
allow read : if request.auth.uid != null ;
allow write: if request.auth.uid != null ;
}有了它,所有用户都可以读取和写入所有文档。您不能使用其他规则覆盖此规则。一旦文档被任何规则认为是可读的,就不能更改。
请参阅overlapping match statements的文档。
相反,您需要做的是按其名称调用每个单独的集合(service-account除外),并将权限分别应用于它们。
https://stackoverflow.com/questions/60893855
复制相似问题