我想为多个用户提供访问权限,以在Firebase Realtime数据库中获取他们有权访问的“消息”。数据库读取读取“ / messages”,并以“作者”和“成员”的身份返回用户有权访问的所有消息的两个集合。
数据库结构如下:
"messages" : {
"msg_id1": {
"access": {
"author": "user-id-1",
"members": {
"user-id-2": true
}
}
"data" : {
"theData": "Hello world!"
}
}
}
我创建了以下规则:
{
"rules": {
"messages": {
".read": "
auth.uid !== null &&
query.equalTo === auth.uid
"
}
}
对应的数据库查询为:
database.ref("messages")
.orderByChild("access/author")
.equalTo(`${user.uid}`)
.once('value', (snapshot) => {
snapshot.forEach( (data) => {
console.log("OWNER", data.val().data.title)
})
})
database.ref("messages")
.orderByChild(`access/members/${user.uid}`)
.equalTo(true)
.once('value', (snapshot) => {
snapshot.forEach( (data) => {
console.log("MEMBER", data.val().message.data.title)
})
})
我希望最小化两次调用数据库的开销和成本。
是否存在一种将数据库查询优化到单个数据库调用中的聪明方法?
亲切的问候/ K