所以我正在深入研究Firebase安全规则,据我所知,树中更高级别的规则会进一步向下延伸到树中。
所以我想知道是否有办法让案例工作,我基本上有一个/bands
子树,我希望任何人都可以编写,但是有admins
和members
子树我希望只根据特殊情况编写。
到目前为止,这是我的意思:
{
"rules": {
".read": "auth != null",
"bands": {
"$bandId": {
".write": "auth !== null",
"$bandId": {
".write": "auth !== null && data.child('creator_id').val() === auth.uid"
}
}
}
}
}
当我去测试“写作”时,在Firebase模拟器中,/bands/-KnLeIHM4zCspwBZjZP9
之类的地方creator_id
与我提供的指定auth.uid
不匹配,我仍然会得到一个模拟器写入成功,因为/bands
树级具有写访问权。
是否有任何聪明的方法可以让任何人“推”到/bands
但是当它降到实际/bands/$bandId
级别时,它会开始查看这些不同的条件?或者我将不得不重新修改我的数据并将树木分成更多的树木?我有其他情况需要这种事情,但这是我正在使用的最简洁的版本,我需要解决。
有什么想法?在此先感谢:)
答案 0 :(得分:1)
{
"rules": {
"bands": {
".read": "auth != null",
".write": "!data.exists() && auth != null",
"$bandId": {
".write": "data.child('creator_id').val() === auth.uid"
}
}
}
}
".write": "!data.exists() && auth != null"
只允许经过身份验证的用户写入bands
内的路径(如果它们不存在)(创建新内容)。