我试图使用"阅读"和"写"规则以简单的方式, 似乎相同的条件导致每个条件的行为不同。
我的规则:
{
"rules": {
".read": true,
".write": false,
"chat": {
".write": true
},
"users": {
"$user_id": {
".read": "$user_id === auth.uid",
".write": "$user_id === auth.uid"
}
}
}
从模拟器写出响应:
Attempt to write {"key":"value"} to /users/1 with auth={"provider":"anonymous","uid":"1234"}
/:.write: "false"
=> false
/users
/users/1:.write: "$user_id === auth.uid"
=> false
No .write rule allowed the operation.
Write was denied.
从模拟器中读取响应:
Attempt to read /users/1 with auth={"provider":"anonymous","uid":"1234"}
/: "true"
=> true
Read was allowed.
为什么?
答案 0 :(得分:2)
在规则的最高级别,您允许读取和禁止写入。
{
"rules": {
".read": true,
".write": false,
Firebase规则自上而下:一旦您允许某个级别的某些内容,您就无法将其带到较低级别。 Firebase documentation对此进行了说明:
这是了解安全和Firebase规则的关键概念。子规则只能为父节点已声明的内容授予其他权限。他们无法撤销读取或写入权限。
因此,您的顶级".read": true
会取代您放置在较低级别的任何读取规则。