我希望保护数据安全,同时允许用户在Firebase Realtime数据库中获取属于他们可以访问的“类别”的“笔记”。我想避免重复和维护访问条目-因此访问仅存储在类别中。只有该类别的作者才能访问该类别中的“注释”。
数据库结构:
"categories" : {
"category_001": {
"access": {
"author": "user-001"
}
"data" : {
"title": "My first category"
}
}
}
"notes" : {
"note_001": {
"data" : {
"note": "Hello world!",
"categoryId": "category_001"
}
}
}
Firebase规则:
{
"rules": {
"notes": {
".read": "
auth.uid !== null &&
query.equalTo === auth.uid
",
"data": {
".read": "
root.child('categories').child('access').child('author').val() === auth.uid"
}
}
}
错误的数据库查询(不检查类别中的访问权限):
database.ref("notes")
.orderByChild("access/author")
.equalTo(`${user.uid}`)
.once('value', (snapshot) => {
snapshot.forEach( (data) => {
console.log("OWNER", data.val().data.title)
})
})
我如何编写数据库查询来检查“ categories / category001”节点的访问权限-同时读取“ notes” / note001“节点”?
亲切的问候/ K
答案 0 :(得分:1)
由于您无法编写正确的查询,因此无法使用这种类型的规则。
您当前的查询:
database.ref("notes")
.orderByChild("access/author")
.equalTo(`${user.uid}`)
这正试图读取每个便笺的access/author
属性,但该属性不存在。 Firebase在这里不会为您执行联接,因此查询将不得不处理notes
子级中的信息。