我正在制作一个慈善应用程序,该应用程序使用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中创建慈善机构。
答案 0 :(得分:1)
我不确定您是否可以使用规则来处理此问题...如果可以,当用户尝试创建新的慈善机构时,它会抛出异常,这不是一个好习惯... 最好将时间戳记添加到Firestore文档中,获取文档并验证是否已过去30分钟
答案 1 :(得分:1)
我自己还没有尝试过。
如果您有1个集合(称为城市),那么其中有一个子集合(称为charities)。然后,当您访问特定的慈善子集合以编写新的慈善文件时,安全规则可以确保父(城市)字段至少满足您30分钟的条件。您必须在城市文档中创建一个新字段lastModified
或lastCharityCreatedAt
。这样,您就不需要云功能。
摘要::在父文档中跟踪上一次写操作,以便您在需要时进行检查。