在Firebase上的新闻文档中添加新属性

时间:2018-11-13 10:45:11

标签: firebase google-cloud-firestore

我正在创建一个投票系统。为此,客户端无法发送votes: 0,因为他可以将其修改为任意数字。

如何为新文档添加votes: 0或检测到该属性不为0,然后从Firestore取消该属性(首选第一种方法)?

2 个答案:

答案 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,因为这样可以避免将来再次执行此操作。