Firebase安全规则?

时间:2016-03-12 07:44:18

标签: json node.js firebase firebase-security firebase-authentication

我似乎很难使用firebase安全规则。我已经阅读了这些指南,但模拟器的结果不够具有描述性(如果我们可以将鼠标悬停在某个节点上,并且弹出一个可以更新规则的按钮,则会更容易)。

这是我的结构:

chats
  - randomChatId01
    - name: "awesome chat"
    - members:
        - userId01 : true
        - userId02 : true
  - randomChatId02
    - members:
        - userId02 : true
  - randomChatId03
    - members:
        - userId01 : true
        - userId02 : true
  - ...

我只希望用户能够读取节点的子节点成员包含经过身份验证的用户的 auth.uid 的聊天节点。

因此,在这种情况下,如果 userId01 已登录,则她只能读取 randomChatId01 randomChatId03 的读取权。

这是我的规则:

{
    "rules": {

        "chats": {

          "$chat": {
            ".read": "data.child('members').val().contains(auth.uid)"
          }
        }
    }
}

然而,它在模拟器中返回以下内容:

Attempt to read /chats with auth={"provider":"anonymous","uid":"eF4ztDEXz7"}
    /
    /chats

No .read rule allowed the operation.
Read was denied.

1 个答案:

答案 0 :(得分:5)

这是因为Firebase安全规则是在您从中读取的位置进行评估的。

您正在尝试阅读/chats。用户没有/chats的读取权限,因此操作会立即失败。

如果您将/chats/randomChatId01视为userId01,则会成功。

文档部分rules are not filters对此进行了介绍。另请参阅Michael Lehenbauer的回答:Restricting child/field access with security rules