java Firebase规则允许写入实时数据库中的特定路径
我依靠一个实时数据库从这个结构中获取应用程序的数据:
每个A
有3个B
根据这些规则,阅读可以正常工作:
{
"rules": {
".read": true,
".write": false
}
}
现在,我处于测试模式&;我想实现两件事:
1允许用户以独占方式将写入每个A
中的路径/../B3/
2用户在/../B3/
中输入的值必须是一个数字(最好是整数)
所以,我做了一些研究,提出了一套规则:
{
"rules": {
"A1":{
"B1":{
".read": true,
".write": false
},
"B2":{
".read": true,
".write": false
},
"B3":{
".read": true,
".write": true,
".validate": "newData.isNumber() && newData.val() % 1 === 0.0"
}
},
"A2":{
"B1":{
".read": true,
".write": false
},
"B2":{
".read": true,
".write": false
},
"B3":{
".read": true,
".write": true,
".validate": "newData.isNumber() && newData.val() % 1 === 0.0"
}
},
"A3":{
"B1":{
".read": true,
".write": false
},
"B2":{
".read": true,
".write": false
},
"B3":{
".read": true,
".write": true,
".validate": "newData.isNumber() && newData.val() % 1 === 0.0"
}
}
}
问题:
我在Firebase控制台上使用游乐场模拟器测试了这些规则,得到了正确的结果。但是,当我尝试在测试设备上读写/../B3/
时,它不起作用。相反,我在LogCat中得到了一个例外:
com.google.firebase.database.DatabaseException: Firebase Database error: Permission denied
at com.google.firebase.database.DatabaseError.toException(com.google.firebase:firebase-database@@16.0.4:229)
at com.app.activity$3.onCancelled(activity.java:567)
我觉得我在构建规则方面遗漏了一些东西。提前谢谢
# 1 楼答案
在我看来,这些规则需要按照
由于您希望用户以独占方式将写入每个
A
子树中的/../B2
节点,因此应仅允许用户访问每个A
子树中的/../B2
节点也。根据docs,在
/../B3
上不需要验证规则,您不希望用户写入这些规则最后,一个。validate语句需要存在于
/../B2
上,以检查数字是否为整数至于例外情况,很明显给出
Permission Denied
错误是因为。写入已在/../B2
中设置为false
另外,一个附带说明是,设置
".write": true
不仅允许用户向数据库写入数据,还允许任何人向数据库写入数据,正如rules docs所指出的那样因此,如果安全性是一个微不足道的问题,请查看规则,以确保您已经实施了加强安全性的措施
最后,希望这能回答你的问题