我在使firebase的安全规则有效时遇到了一些问题。我一直在拒绝。
理想情况下,我希望它是如何构建的。使数据更容易阅读。如果某个模型不存在。用户将能够为该车创建一个部分并将他的帖子放在那里。但是,当另一个用户想要发布相同的汽车模型时。他只会添加到帖子列表中。
{
"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
进行尝试。
答案 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()"
}
}
}
}
}