"display": {
".read": "auth != null",
".write": "auth != null",
"abc": {
".indexOn": ["hhh"],
"$display_id": {
"aaa": {".validate": "newData.isString() && newData.val().length > 0"},
"bbb": {".validate": "newData.isString() && newData.val().length > 0"},
"ccc": {".validate": "newData.isString() && newData.val().length > 0"},
"ddd": {".validate": "newData.isString() && newData.val().length > 0"},
"eee": {".validate": "newData.isString() && newData.val().length > 0"},
"fff": {".validate": "newData.isString() && newData.val().length > 0"},
"ggg": {".validate": "newData.isString() && newData.val().length > 0"},
"hhh": {".validate": "newData.isString() && newData.val().length > 0"},
"iii": {".validate": "newData.isString() && newData.val().length > 0"},
"jjj": {".validate": "newData.isString() && newData.val().length > 0"},
"kkk": {".validate": "newData.val() == $display_id"},
"lll": {".validate": "newData.isNumber()"},
"$others": {".validate": false}
}
}
}
以上代码是Firebase数据库规则部分中我的一个路径规则的摘录。
仅供参考,display_id
是推送值,lll
是从calendar.getTimeInMillis()
获得的长。
我一直试图找到解决方案很长一段时间,我即将放弃。
这是我迄今为止的一些观察。
.read
或.write
,因此在读取或写入数据时不应出现任何级联错误。auth != null
我迷路了。当我通过我的应用程序将数据写入此节点时,我不断获得权限拒绝。
有什么想法吗?
答案 0 :(得分:0)
对于最新的更新感到抱歉!我设法解决了这个问题。如果我没有发布所需的代码块,请道歉。
遗憾的是,这个问题是一个层叠问题,我一定是出于某种原因误解了它。
如果我要在特定节点上放置读写规则,我必须至少从该特定节点引用,并且我希望文档更清晰但是在意识到这个错误之后一切都运行得很好!
例如,如果我有一个类似这样的数据库结构:
"display": {
".read": "auth != null",
".write": "auth != null",
"abc": {
".indexOn": ["hhh"],
"$display_id": {
"aaa": {".validate": "newData.isString() && newData.val().length > 0"},
"bbb": {".validate": "newData.isString() && newData.val().length > 0"},
"ccc": {".validate": "newData.isString() && newData.val().length > 0"},
"ddd": {".validate": "newData.isString() && newData.val().length > 0"},
"eee": {".validate": "newData.isString() && newData.val().length > 0"},
"fff": {".validate": "newData.isString() && newData.val().length > 0"},
"ggg": {".validate": "newData.isString() && newData.val().length > 0"},
"hhh": {".validate": "newData.isString() && newData.val().length > 0"},
"iii": {".validate": "newData.isString() && newData.val().length > 0"},
"jjj": {".validate": "newData.isString() && newData.val().length > 0"},
"kkk": {".validate": "newData.val() == $display_id"},
"lll": {".validate": "newData.isNumber()"},
"$others": {".validate": false}
}
}
}
在我的代码中,我应该在尝试对该节点执行查询之前立即编写此代码(在onCreate()中编写此代码会有所帮助):
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("display") //reference immediately to the "display" node, where you intend to put the read and write rules;
希望这会有所帮助,并对Firebase规则文档的巨大误解表示道歉。