gpt4 book ai didi

javascript - Firestore 安全规则 - 如何检查 FieldValue.increment 是否有效?

转载 作者:行者123 更新时间:2023-12-01 15:27:07 25 4
gpt4 key购买 nike

我有一个文件“posts”的firebase集合,每个post文件包含四个字段:“likes”、“dislikes”、“super”和“total”。
我使用以下三个数据对象对每个文档执行批量更新:

 var data_like_obj =    {
likes: firebase.firestore.FieldValue.increment(1),
total: firebase.firestore.FieldValue.increment(1)
}


var data_dislike_obj = {
dislikes: firebase.firestore.FieldValue.increment(1),
total: firebase.firestore.FieldValue.increment(-1)
}


var data_super_obj = {
super: firebase.firestore.FieldValue.increment(1),
total: firebase.firestore.FieldValue.increment(4)
}

我找不到允许我检查增量是否有效的安全规则,即只有(+1、-1 或 +4),没有别的。我做了以下安全功能:
function validVote() {
return ( ( isUpdatingField("super") || isUpdatingField("liked") || isUpdatingField("disliked") ) && isUpdatingField("total") ) &&
(( isUpdatingField("disliked") && (0 <= (int(incomingData().disliked) - int(existingData().disliked)) && (int(incomingData().disliked) - int(existingData().disliked)) <= 1) ) ||
( isUpdatingField("super") && (0 <= (int(incomingData().super) - int(existingData().super)) && (int(incomingData().super) - int(existingData().super)) <= 1) ) ||
( isUpdatingField("liked") && (0 <= (int(incomingData().liked) - int(existingData().liked)) && (int(incomingData().liked) - int(existingData().liked)) <= 1) )) &&
( incomingData().total == incomingData().super * 4 + incomingData().liked - incomingData().disliked )
;
}
// Utility Funcs
function existingData() {
return resource.data;
}
function incomingData() {
return request.resource.data;
}

我在模拟器上测试的时候功能还不错,但是模拟器没办法提交 FieldValue.increment目的。如何验证增量是否合法?

最佳答案

控制台模拟器非常有限。它基本上只是一个您可以习惯基本规则的游乐场。对于认真的开发,您应该使用作为 Firebase CLI 一部分的规则模拟器来针对实际查询验证您的规则:

https://firebase.google.com/docs/firestore/security/test-rules-emulator

您将能够使用实际的 FieldValue.increment token 发出查询并测试更改是否有效。

关于javascript - Firestore 安全规则 - 如何检查 FieldValue.increment 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57916513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com