Ant*_*ger 6 firebase firebase-security google-cloud-firestore
我的请求在外观上非常简单:使用 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';
}
}
Run Code Online (Sandbox Code Playgroud)
但get(/databases/$(database)/documents/slots/$(slot)/participants)不能正常工作,因为get()只应用于获取单个文档。
也许我可以尝试使用云功能的东西...
我的问题有什么解决办法吗?感谢您的帮助 !
一般而言(无论是在数据库规则还是客户端 SDK 中),无法知道集合的大小。您可以选择将其记录在由 Cloud Functions 管理的另一个文档中。但还要记住,文档每秒写入次数限制为 10 次,因此繁忙的集合可能无法与用于记录大小的文档保持同步。
您还可以使用 Cloud Functions 从集合中删除文档,以响应添加的新文档,但现在了解集合大小的限制将会出现问题。最好找到一种查询方式来查找要删除的文档(例如,按时间戳),而不是依赖于集合的大小。
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |