我正在使用firebase创建一个应用程序,并且遇到了可用安全设置的一些问题。 该应用程序的数据模型非常简单,如下所示 -
posts : {
"$postid":{
"meta":{
"state":true,
"text" :"I should be read",
},
"likes":{uid1,uid2},
"rating":{uid1,uid2},
"comments":{uid1,uid2},
"tag":{tag1,tag2},
"category":{cat1,cat2},
"status":{1},
"content":{},
"createdTime":{},
}
}
我已应用以下安全设置:
"posts":
{
".read" : "auth != null",
"$postid" :
{
"rating"{".write" : "auth != null"}
}
}
我想限制内部节点“评级”的读取权限。如何在不更改根节点读取规则的情况下应用此规则?
答案 0 :(得分:0)
Firebase规则过滤掉了 - 因此,如果您在postid
上有规则,则它会对整个子对象提供写入权限。
但是有两种不同的方法来保护内容。
选项1.指定预期的对象,我建议在Bolt上查看Data Validation。
选项2.是指定具有写权限的每个子对象;
"posts": {
".read": "auth != null",
"$postid": {
"meta": {
".write": "auth != null"
},
"likes": {
".write": "auth != null"
},
"comments": {
".write": "auth != null"
},
"tag": {
".write": "auth != null"
},
"category": {
".write": "auth != null"
},
"status": {
".write": "auth != null"
},
"content": {
".write": "auth != null"
},
"createdTime": {
".write": "auth != null"
}
}
}
您需要调整对象的写入方式,这会产生大量与数据库的额外交互。
理想的解决方案是将评级转移到不同的对象,例如;
"ratings": {
".read": "auth != null",
"$postid": {
// New location of the rating
}
}