我有这个结构数据:
{
"test" : {
"a" : {
"view" : true
},
"b" : {
"view" : false
},
"c" : {
"view" : true
}
}
}
我有这个规则:
{
"rules": {
"test": {
// ".read": true,
"$id": {
".read": "data.child('view').val() === true"
}
}
}
}
使用以下代码:
ref.child('test/a').once('value',snap=>{
console.log('a:',snap.val())
})
ref.child('test/b').once('value',snap=>{
console.log('b:',snap.val())
})
ref.child('test').once('value',snap=>{
console.log('all:',snap.val())
})
我只得到:
a: Object {view: true}
我希望得到这个结果(注意b
中all
遗漏的方式{/ 1}}:
a: Object {view: true}
all: Object {a: Object, c: Object}
如果我在第4行".read": true
的安全规则中取消注释,我会得到所有内容,这不是我想要的。
如何列出所有具有规则的项目" .read"在Firebase中评估为true?
更新:
看起来按预期获得a
和c
的唯一方法是创建包含所有项目的数组:
{
"items" : [ "a", "b", "c" ],
"test" : {
"a" : {
"view" : true
},
"b" : {
"view" : false
},
"c" : {
"view" : true
}
}
}
规则:
{
"rules": {
"test": {
"$id": {
".read": "data.child('view').val() === true"
}
},
"items" :{
".read": true
}
}
}
然后使用以下代码获得预期结果:
ref.child('items').once('value',snap=>{
snap.forEach(item=>{
ref.child('test/'+item.val()).once('value',snap=>{
console.log(snap.key)
})
})
})