【发布时间】:2019-07-18 21:24:29
【问题描述】:
我正在构建一个 NodeJS Express 应用程序并使用 Firebase 作为后端。我正在尝试保护我的 firebase 后端,更具体地说是使用 Firestore 安全规则的 firestore 数据库。但是,我似乎无法触发我的安全规则。
我有一个名为 /api/goalPRs/:goalPRId 的路由,它通过调用
来更新带有请求正文的数据库引用const goalPRsRef = db.collection('goalProgressReports');
goalPRsRef.doc(goalPRId).update(newGoalPR).then(()=>({update: 'Success'}));
现在,每个goalPR 都有一个名为targetGoalId 的字段,我希望它保持不变,我不希望该数据是可编辑的。因此,我尝试设置以下 Firestore 安全规则。
service cloud.firestore {
match /databases/{database}/documents {
match /goalProgressReports/{goalPR} {
allow update: if request.resource.data.targetGoalId == resource.data.targetGoalId;
}
}
}
使用此安全规则,如果旧的 targetGoalId 不等于新的,我希望对 goalProgressReport 集合中的文档的任何更新都应该被拒绝。然而,这种情况并非如此。我可以提供一个新的 targetGoalId,但它会错误地更新。
此外,即使我使用安全规则尝试这样的事情:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false
}
}
}
我仍然可以写入数据库,尽管根据我的理解,这条规则不应该允许对数据库进行任何读取或写入。我对安全规则如何工作的理解不正确吗?如果 targetGoalId 已更改,如何修复我的 goalProgressReport 安全规则以不允许更新?
【问题讨论】:
标签: javascript node.js firebase google-cloud-firestore firebase-security