2016-07-14 138 views
0

我的一些问题使我的Firebase安全规则能够正常工作。我得到一个不变的拒绝。 当我尝试解释我希望它如何工作以及我在做什么时,与我同时袒露。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

回答

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()" 
      } 
     } 
     } 
    } 
    }