Firebase规则 - 读取和写入不起作用

时间:2015-09-08 12:28:32

标签: firebase firebase-security

我试图使用"阅读"和"写"规则以简单的方式, 似乎相同的条件导致每个条件的行为不同。

我的规则:

{
    "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.

为什么?

1 个答案:

答案 0 :(得分:2)

在规则的最高级别,您允许读取和禁止写入

{
    "rules": {
        ".read": true,
        ".write": false,

Firebase规则自上而下:一旦您允许某个级别的某些内容,您就无法将其带到较低级别。 Firebase documentation对此进行了说明:

  

这是了解安全和Firebase规则的关键概念。子规则只能为父节点已声明的内容授予其他权限。他们无法撤销读取或写入权限。

因此,您的顶级".read": true会取代您放置在较低级别的任何读取规则。