我在Firebase中有以下“数据库”:
projects: {
"-KpVHI1za0ElBWIJWb2k": {
"name": "John's project"
"uId": "Kojh6pkRNJPBzU78yzNXUiFv3aP2"
},
"-KpVHI1zadedldedWIJWb2k": {
"name": "Kojh6pkRNJPBzU78yzNXUiFv3aP2"
"uId": "Kojh6pkRNJPBzU78yzNXUiFv3aP2
},
"-KpVKKjSnCD3obVW-hsw": {
"name": "Kojh6pkRNJPBzU78yzNXUiFv3aP2"
"uId": "KPQgqAniekUhavofb79v2Jqjdwh1"
}
}
是否有办法使用firebase规则检索具有特定“uId”值的所有项目。 例如,我有这些规则,但它们不起作用:
{
"rules": {
"projects": {
".read": "auth != null && data.child('uId').val() == auth.uid",
".write": "auth != null"
}
}
}
我正在进行以下查询
firebase.database().ref('projects')on('value', (project) => {
onRequestProject(project)
}, (error) => {
onRequestError(error)
})
我查看了Firebase文档,但在那里我找不到解决此问题的方法。 我收到的错误:“错误:PERMISSION_DENIED”。 欢迎任何帮助!
谢谢!
答案 0 :(得分:3)
问题是您正在尝试读取所有子对象,但是您给出了使用匹配的uid读取子对象的规则。
尝试将db查询更改为:
firebase.database().ref('projects').orderByChild('uId').equalTo(<your_reqd_userId>).on('value', (project) => {
onRequestProject(project)
}, (error) => {
onRequestError(error)
})
如果上述方法不起作用,我建议您将数据库结构更改为:
"projects": {
"uid1":{
Add your child objects here.
},
"uid2":{
Add your child objects here.
}
}
和安全规则:
{
"rules": {
"projects": {
"$uId": {
".read": "auth.uid === $uId",
".write": "auth.uid === $uId"
}
}
}
您的数据库查询将是:
firebase.database().ref('projects').child(<your_reqd_userId>).on('value', (project) => {
onRequestProject(project)
}, (error) => {
onRequestError(error)
})