Firebase安全规则问题

时间:2016-07-14 12:20:58

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

我在使firebase的安全规则有效时遇到了一些问题。我一直在拒绝。

Structure of the database 理想情况下,我希望它是如何构建的。使数据更容易阅读。如果某个模型不存在。用户将能够为该车创建一个部分并将他的帖子放在那里。但是,当另一个用户想要发布相同的汽车模型时。他只会添加到帖子列表中。

{
   "rules":{
      ".read":"auth != null",
      "Cars":{
         "$anyCar":{
            "$postName":{
               ".write":"auth != null",
               ".validate":"newData.hasChildren(['uid']) && newData.child('uid').isString() && newData.child('uid').val() == auth.uid"
            }
         }
      }
   }
}

这是我实现此数据库规则的方式。

{
   "Volvo":{
      "-KM_nqDpB78ZM0SE485F":{
         "color":"-10053121",
         "comments":0,
         "date":10,
         "id":1231,
         "uid":"45738372-3b72-4328-aa99-a00c05482973",
         "rating":0,
         "topic":"Volvo is a safe car",
         "user":"Brahim"
      }
   }
}

这是我在模拟器上尝试的json。 我在使用模拟器时进行了身份验证,并且我正在针对位置/Cars进行尝试。

1 个答案:

答案 0 :(得分:3)

根据您的安全规则,您可以写入帖子,但不能创建新帖子

"$postName":{
  ".write":"auth != null",
  ".validate":"newData.hasChildren(['uid']) && newData.child('uid').isString() && newData.child('uid').val() == auth.uid"
        }

您应该允许$anycar节点中的写访问权限,并且可能只允许该特定用户编辑帖子

   {
   "rules":{
      ".read":"auth != null",
      "Cars":{
        "$anyCar":{
          ".write":"auth != null",
          "$postName":{
           ".write": "auth.uid == newData.child('uid').val()"
           ".validate":"newData.hasChildren(['uid']) && newData.child('uid').isString()"
          }
        }
      }
    }
  }