我正在尝试使用 firebase
在前端获取数据。以下是我的规则如何应用于实时数据库:
{
"rules": {
"users": {
".indexOn": "username",
"$userId": {
".indexOn": "username",
".read": "$userId==auth.uid",
".write": "$userId==auth.uid",
"favorites": {
".indexOn": "thumb"
}
}
},
"files": {
".indexOn": ["uploadId", "uploadedBy", "fileURL"],
"$fileId": {
".write": "newData.child('uploadedBy').val() == auth.uid",
".read": "data.child('uploadedBy').val() == auth.uid",
".indexOn": "fileURL"
}
},
"uploads": {
"$id": {
".write": "newData.child('createdBy').val() == auth.uid || data.child('assignedModeratorId').val() == auth.uid",
".read": "data.child('createdBy').val() == auth.uid || data.child('assignedModeratorId').val() == auth.uid"
},
".indexOn": ["createdBy", "status", "assignedModeratorId"]
}
}
}
这是一个上传
文档的样子:
我正在使用这个功能:
const snapshot = await firebase.database().ref('uploads').orderByChild('createdBy').equalTo(uid).limitToLast(1000).once('value');
但我在前端不断收到Error:permission_denied at/uploads:Client does not have access the required data.
错误。当我在云功能中使用 admin
时,它工作正常。我设定的规则有什么问题吗?
最佳答案
您的代码尝试从 /uploads
读取数据,但您的规则未授予任何人从该节点读取数据的权限 - 因此它拒绝读取。
如果您想允许用户阅读他们创建的上传内容,您的规则应该 validate that query像这样的东西:
"uploads": {
".read": "auth.uid !== null &&
query.orderByChild === 'createdBy' &&
query.equalTo === auth.uid"}
关于javascript - 即使分配了读取规则,Firebase 也会阻止数据获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75409459/