【问题标题】:Limit a number of documents in a subcollection in firestore rules在 Firestore 规则中限制子集合中的文档数量
【发布时间】:2019-04-02 04:58:52
【问题描述】:

我的请求看起来很简单:使用 Firestore 规则限制子集合中的文档数量。

我已经知道使用.size() 可以知道数组的大小。所以,你可能会问为什么我不使用数组来存储我的项目?好吧,我希望“普通”用户不能更新我的父文档字段,但能够将文档添加到我的子集合中。

我已经尝试过这样做:

match /slots/{slot} {
      allow read: if true;
      allow write: if getRole() == 'ADMIN';

      match /participants/{participant} {
        allow read: if true;
        allow create: if get(/databases/$(database)/documents/slots/$(slot)/participants).size() < 2;
        allow delete: if participant.data.id == request.auth.uid || getRole() == 'ADMIN';
      }
    }

但是get(/databases/$(database)/documents/slots/$(slot)/participants) 不起作用,因为get() 只能用于获取单个文档。

也许我可以试试云功能……

我的问题有什么解决办法吗? 感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    在一般意义上(在数据库规则和客户端 SDK 中)没有办法知道集合的大小。您可以选择将自己记录在另一个由 Cloud Functions 管理的文档中。但请记住,一个文档被限制为每秒 10 次写入,因此繁忙的集合可能无法与用于记录大小的文档保持同步。

    您还可以使用 Cloud Functions 从集合中删除文档以响应添加的新文档,但现在知道集合大小的限制将是一个问题。最好找到一种查询方法来查找要删除的文档(例如,按时间戳),而不是根据集合的大小。

    【讨论】:

    • 感谢您的回答。云函数可以同步吗?例如,如果我为每个添加的子文档增加一个字段,我不希望能够在 Cloud Functions 执行之前添加另一个新的子文档。我不认为这是可能的,但是......
    猜你喜欢
    • 2020-03-21
    • 2019-10-15
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2021-07-17
    • 2018-11-27
    • 2018-09-26
    • 2018-06-21
    相关资源
    最近更新 更多