【问题标题】:How to limit in Cloud Firestore security rules如何限制 Cloud Firestore 安全规则
【发布时间】:2020-08-21 18:08:24
【问题描述】:

我正在制作一个慈善应用,它使用 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 市创建慈善机构,我想阻止任何人在 A 市创建慈善机构 30 分钟..

【问题讨论】:

  • 请张贴您的数据库结构截图,以便我们可以按此测试代码。还要发布您当前在数据库中发布新的慈善机构创建的详细信息的代码。
  • 感谢您的评论,我认为回答的人是对的,也许我无法用规则处理它
  • 你必须使用云功能。如果您同意使用云功能,我可以提供帮助..
  • 好主意,我不知道云功能,所以会尝试阅读和了解,非常感谢
  • 好的,等你准备好了就告诉我。如果您在 Youtube [firebase 的官方视频] 上观看 Firecasts,您会很快学会。他们是最好的

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


【解决方案1】:

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

【讨论】:

  • 非常感谢,我想过,但我还没有尝试过.. 会做,然后回到这个答案,谢谢你
【解决方案2】:

我自己没试过。

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

总结:在父文档中跟踪最后一次写入,以便在需要时进行检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多