Firebase数据库规则-动态密钥的通配符

时间:2020-02-16 20:43:19

标签: firebase firebase-realtime-database firebase-authentication firebase-security

我有一个用例,我希望仅当其ID有密钥===时,才允许其他用户读取ID密钥下的数据。

假设我有用户123和456在“

orders-
              I
               -123
                        I
                         -456

我只希望用户123和456能够读取456个节点。根据我提供的规则,只有123个节点可以读取节点:

"orders": {
    "$uid": {
        ".read": "auth.uid  === $uid || root.child('orders').child($uid).child(auth.uid).exists()",
        ".write": "auth.uid != null",
    }
}

我在这里做错了什么?有人可以帮我吗?

编辑:模拟器的两个屏幕截图

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

我通过设置以下规则解决了它(注意$ id嵌套在$ uid中):

{
  "rules": {
          "orders": {
          "$uid": {
            ".read": "auth.uid  === $uid",
        ".write": "auth.uid === $uid",
          "$id": {
            ".read": "auth.uid  === $id",
            ".write": "auth.uid === $id"
          },
          }
        }
  }
}

以前,我认为这条线应该可以完成工作:

 ".read": "auth.uid  === $uid || root.child('orders').child($uid).child(auth.uid).exists()",