firebase数据库规则允许在特定节点上写入
我有以下数据库:firebase数据库规则允许在特定节点上写入,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我有以下数据库: actions : [ { "added" : 1535293085383, "countdown" : 9999999999, "item" : 1, "type" : "a" }, { "added" : 1535293085383, "countdown" : 999999999, "extra" : "bb", "item" : "2", "type" : "b" }, { "added" : 1635293085383,
actions : [ {
"added" : 1535293085383,
"countdown" : 9999999999,
"item" : 1,
"type" : "a"
}, {
"added" : 1535293085383,
"countdown" : 999999999,
"extra" : "bb",
"item" : "2",
"type" : "b"
}, {
"added" : 1635293085383,
"countdown" : 1,
"item" : 3,
"type" : "c"
}]
我希望任何登录的用户都能够读取所有数据,但只能写入倒计时节点
我的想法是,每次用户读取数据时,都会减小该值,但不允许他们更新任何其他节点
这是我写的规则
{
"rules":{
".read":false,
".write":false,
"actions":{
".indexOn":[
"added"
],
".read": "auth != null",
"countdown":{
".write" : "auth != null"
}
}
}
它拒绝从未经身份验证的用户处读取它允许从经过身份验证的用户处读取数据
即使在倒计时节点中,也无法从经过身份验证的用户处写入
如何修复它您的安全规则缺少一个级别。现在您允许写入
/actions/countdown
。但您希望允许写入/actions/*/countdown
。要捕获该需求,请在规则中使用$
变量:
{
"rules":{
".read":false,
".write":false,
"actions":{
".indexOn": [ "added" ],
".read": "auth != null",
"$actionid": {
"countdown":{
".write" : "auth != null"
}
}
}
}
现在,由于$actionid
的原因,这里的倒计时/.write
规则适用于/actions
的每个子节点