Limit a number of documents in a subcollection in firestore rules

久未见 提交于 2020-01-13 11:22:50

问题


My request is pretty simple in appearence : limiting the number of documents in a subcollection using Firestore Rules.

I already know that it is possible to know the size of an array using .size(). So, you may ask why I am not using an array to store my items ? Well, I want a "normal" user to not be able to update my parent document field but to be able to add a document to my subcollection.

I already tried to do this :

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';
      }
    }

But get(/databases/$(database)/documents/slots/$(slot)/participants) does not work as get() should only be used for fetching a single document.

Maybe I can try something with cloud functions...

I there any solution to my problem ? Thank you for your help !


回答1:


In a general sense (both in database rules and client SDKs) there is no way to know the size of a collection. You have the option of recording that yourself in another document that's managed by Cloud Functions. But bear in mind also that a document is limited to 10 writes per second, so busy collections might not be able to keep in sync with the document used to record size.

You could also use Cloud Functions to remove documents from a collection in response to new documents being added, but the limitation of now knowing the size of the collection will be problematic. It might be better to find a way to query to find documents to delete (for example, by timestamp) rather than depending on the size of the collection.



来源:https://stackoverflow.com/questions/53042495/limit-a-number-of-documents-in-a-subcollection-in-firestore-rules

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!