Firebase安全规则?

Kin*_*gon 3 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
  - ...
Run Code Online (Sandbox Code Playgroud)

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

因此,在这种情况下,如果userId01已登录,则她只能读取randomChatId01randomChatId03的读取权限.

这是我的规则:

{
    "rules": {

        "chats": {

          "$chat": {
            ".read": "data.child('members').val().contains(auth.uid)"
          }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

No .read rule allowed the operation.
Read was denied.
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 5

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

你正试着读/chats.用户没有读取权限/chats,因此操作立即失败.

如果你读/chats/randomChatId01,userId01它会成功.

这在文档部分中涵盖,规则不是过滤器.另请参阅Michael Lehenbauer的答案:使用安全规则限制子/域访问