Firebase规则-仅在某些字段上允许.update()
假设我有这样一个用户集合:Firebase规则-仅在某些字段上允许.update(),firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,假设我有这样一个用户集合: users{ userId1234 : { name: "Joe", interests: "Programming", score: 1337 } } 是否可以编写允许 let user = {name:"Joey",interests:"Code"}; db.ref("users/").child("userId1234").update(user); 但不允许: let user = {name
users{
userId1234 : {
name: "Joe",
interests: "Programming",
score: 1337
}
}
是否可以编写允许
let user = {name:"Joey",interests:"Code"};
db.ref("users/").child("userId1234").update(user);
但不允许:
let user = {name:"Joey",interests:"Code",score:9000};
db.ref("users/").child("userId1234").update(user);
本质上,我想保护某个字段不被写入(本例中为score)。我知道我可以选择将字段移出到另一个集合,但如果可能的话,我更愿意这样做
以下是我迄今为止尝试过但不起作用的方法:
"users":{
".write":"auth!=null",
"$userId":{
"score":{".write":false},
"$otherFields":{".write":"auth != null"}
}
}
^这将阻止写入/users/userId/score,但不会使用包含score属性的对象阻止/users/userId
"users":{
".write":"false",
"$userId":{
"score":{".write":false},
"$otherFields":{".write":"auth != null"}
}
}
^这允许我正确写入字段,但会完全阻止.update()
谢谢!
-乔我的解决方案
"users":{
"$userId":{
".write":"auth!=null",
".validate":"newData.child('score').val()
===data.child('score').val()",
"score":{".write":false},
"$otherFields":{".write":"auth != null"}
}
}
“.validate”:“!newData.haschilds(['score'])”不起作用,因为“newData”实际上是更新数据的未来合并结果,而不是发布的原始数据,如果您已经有了分数,它将失败。Hi Joe。你应该将你的解决方案作为答案发布,而不是直接包含在你的帖子中。实际上,在堆栈溢出中鼓励使用。干杯!:)知道了。谢谢@AL.:D