我有一个像这样的数据结构(收藏 and 文件而不是JSON当然,但你明白了):
{
users: {
user1:{
name: Alice,
groups: {
groupA:{subbed:true},
groupB:{subbed:true}
}
},
user2:{
name: Bob,
groups: {
groupC:{subbed:true},
groupD:{subbed:true}
}
}
}
}
基本上,这是注册用户 ID 和每个用户订阅的组 ID。我想编写一个安全规则,仅当用户是当前的身份验证用户时才允许访问用户配置文件和子集合,并且根据我对文档的阅读,我认为通配符可以实现此目的...
match /users/{user=**}{
allow read,write: if user == request.auth.uid;
}
有了这个,我就可以阅读user
文档很好,但当我尝试阅读时出现权限错误groups
子集合。我只能通过显式匹配子集合来使其工作......
match /appUsers/{user}{
allow read,write: if user == request.auth.uid;
match /groups/{group}{
allow read,write: if user == request.auth.uid;
}
}
...所以我的问题是,这两个示例之间有什么区别以及我对递归通配符的误解是什么?我以为{user=**}
第一个示例的一部分应授予对user
文档及其所有子集合、子子集合等无限(对于授权用户),并且应该消除专门为存储在较低位置的数据编写规则的需要,就像我在第二个示例中必须做的那样。
我只在 Firestore 上摆弄了很短一段时间,所以这可能是一个真正愚蠢的问题:)
谢谢大家