如何限制Cloud Firestore安全规则

时间:2020-05-06 17:04:31

标签: firebase flutter google-cloud-firestore firebase-security

我正在制作一个慈善应用程序,该应用程序使用Firebase SDK直接从应用程序内部与Cloud Firestore对话

任何人(无论用户是不是)都可以创建一个慈善机构,每个慈善机构都位于一个城市中。

如果用户添加了一个新的慈善组织,我想阻止其他用户在他创建慈善组织的城市中创建新的慈善组织30分钟。

我认为这是实施30分钟时长的方法,但是我如何在每个城市做到这一点

match /charity/{document=**} {
  allow create: if isCalm(); 
  request.time > resource.data.timestamp + duration.value(30, 'm');
 }
}

如果您不明白,这里是一个示例:假设我有3个城市(AB和C),如果用户在城市A中创建了慈善机构,我要在30分钟内阻止任何人在城市A中创建慈善机构。

2 个答案:

答案 0 :(得分:1)

我不确定您是否可以使用规则来处理此问题...如果可以,当用户尝试创建新的慈善机构时,它会抛出异常,这不是一个好习惯... 最好将时间戳记添加到Firestore文档中,获取文档并验证是否已过去30分钟

答案 1 :(得分:1)

我自己还没有尝试过。

如果您有1个集合(称为城市),那么其中有一个子集合(称为charities)。然后,当您访问特定的慈善子集合以编写新的慈善文件时,安全规则可以确保父(城市)字段至少满足您30分钟的条件。您必须在城市文档中创建一个新字段lastModifiedlastCharityCreatedAt。这样,您就不需要云功能。

摘要::在父文档中跟踪上一次写操作,以便您在需要时进行检查。