您如何编写安全规则以确保用户只能写入一次Cloud Firestore文档?

时间:2020-07-14 21:04:55

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

我正在使用Firebase创建一个轮询应用程序,并且我需要写下一个安全规则,该规则允许用户仅一次写入文档。我曾考虑过创建一个已写入文档的用户的用户ID列表,然后创建一个规则来检查是否有新的请求来自已经投票的用户。但是,麻烦的是,我将不得不从客户端创建这样一个不安全的用户列表。谁能告诉我如何解决此问题?

1 个答案:

答案 0 :(得分:1)

只需通过一条规则强制执行,即当用户写文档时,他还必须将自己添加到列表中。简单的例子:

match /docs/{docid} {
  allow update: if userNotInList() && userAddedToList()
    && ... // Add more conditions as needed
  
  function userNotInList() {
    return !exists(/databases/$(database)/documents/docs/$(docid)/userlist/$(request.auth.uid));
  }
  function userAddedToList() {
    return existsAfter(/databases/$(database)/documents/docs/$(docid)/userlist/$(request.auth.uid));
  }
  match /userlist/{userid} {
    allow create: if userid == request.auth.uid
      && request.resource.data.time == request.time  // For instance
      && ... // Add more conditions as needed
}

而且您必须成批写两个文档