Json Firebase安全规则?

Json Firebase安全规则?,json,node.js,firebase,firebase-security,firebase-authentication,Json,Node.js,Firebase,Firebase Security,Firebase Authentication,我似乎很难遵守firebase的安全规则。我已经阅读了指南,但是模拟器的结果描述得不够详细(如果我们可以将鼠标悬停在一个节点上,并弹出一个按钮来更新规则,那就容易多了) 我的结构是这样的: chats - randomChatId01 - name: "awesome chat" - members: - userId01 : true - userId02 : true - randomChatId02 - members:

我似乎很难遵守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.

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

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

如果您以
userId01
的身份阅读
/chats/randomChatId01
,则会成功

文档部分介绍了这一点。另请参见Michael Lehenbauer的回答: