火存储规则和数据结构



我有一个关于数据结构和规则的问题。。。我有用户可以投票的内容。类似这样的东西:

Firestore对象:

{
name: "Cat",
description: "A cat named Cat",
votes: 56
}

现在。。。我希望经过身份验证的用户能够更新对投票的访问权限,但不能访问对象的任何其他值,当然还有读取权限,因为必须显示内容。

我这样做是因为我想在显示内容时避免额外的查询。

我应该创建另一个集合吗;"投票";也许选票保存在哪里,并为每份文件提出额外的请求来获得选票?

在规则中,您可以访问之前和写入之后的数据状态,因此您可以测试特定字段以确保它们没有更改:

function existing() {
return resource.data;
}
function resulting() {
return request.resource.data;
}
function matchField(fieldName) {
return existing()[fieldName] == resulting()[fieldName];
}
....
allow update: if matchField("name") && matchField("description")
....

这些函数只是让规则更容易阅读。

最新更新