【发布时间】:2020-11-03 05:59:57
【问题描述】:
在以下示例中,updatedData.maxChips 设置为数字 50000,不应定义 updatedData.maxScore。
function updatePlayerConditions(player) {
let updatedData = request.resource.data;
let originalData = resource.data;
let condition1 = updatedData.maxChips > 0 ? updatedData.maxChips == originalData.maxChips : true; // worked
let condition2 = updatedData.maxScore ? updatedData.maxScore = originalData.maxScore : true;
return condition1 && condition2;
}
上面的条件 1 代码有效,但是当我将 updatedData.maxChips > 0 更改为 updatedData.maxChips 或 !!updated.data.maxChips 时,它不起作用。如果将 JS 真实性规则应用于 Firestore 安全规则,那么这对我来说没有意义。
我收到错误 FirebaseError: PERMISSION_DENIED: from condition2。
如何在安全规则中使用未定义的值?如果有人可以解释或指出 Firebase Firestore 安全规则的一般工作原理,那将特别有帮助。我已经看过这里了:https://firebase.google.com/docs/rules/rules-language#building_conditions
更新:我意识到我可以将三元组开头的updatedData.maxScore 替换为maxScore in updatedData,这要感谢找到这个问题:Firestore Security Rules: request.time "undefined on object"。我仍然很乐意找到或阅读有关 Firestore 安全规则中的真实性如何运作的说明。
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security