我正在创建一个投票系统。为此,客户端无法发送votes: 0
,因为他可以将其修改为任意数字。
如何为新文档添加votes: 0
或检测到该属性不为0,然后从Firestore取消该属性(首选第一种方法)?
答案 0 :(得分:2)
您将使用不同的安全性规则来使用不同的文档方法,例如使用某个规则进行创建,使用另一条规则进行更新。
service cloud.firestore {
match /databases/{database}/documents {
match /votes/{voteId} {
allow create: if request.resource.data.votes == 0
allow update: if request.resource.data.votes == resource.data.votes
}
}
}
这意味着用户可以创建投票,但是他们必须将votes
设置为0
,并且您可以更新投票文档,但是votes
需要等于当前值。您还希望查看其他规则,例如
request.resource.data.size() == 1
以限制要添加的文档中的字段
request.resource.data.keys().hasAll(['field_1','field_2'])
,以确保它具有更新/创建文档所需的所有字段。
答案 1 :(得分:2)
这应该是reading data from the collection的基本组合,然后执行transactions of batched updates。如果您在执行此操作时遇到问题,请显示minimal code that reproduces where you got stuck。
当然也可以实现Jack's security rules,因为这样可以避免将来再次执行此操作。