如何限制用户保存超过10条文档?能否通过Rules实现?
限制用户最多保存10条文档的实现方案
方案1的问题分析
- 前端提前统计用户已有文档数量再限制写入的方式完全不可靠,因为客户端可以被篡改(比如伪造API响应、直接调用Firebase API绕过前端校验),无法真正限制用户的写入行为。
方案2:用Firebase Security Rules实现可靠限制
这是最安全的方案,因为规则运行在Firebase服务器端,客户端无法绕过。具体规则代码如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 限制DataCollection的写入操作 match /DataCollection/{docId} { // 允许认证用户读取自己的文档 allow read: if request.auth != null && resource.data.uid == request.auth.uid; // 允许写入的条件:用户已认证、写入的文档属于当前用户、且用户已有文档数小于10 allow create: if request.auth != null && request.resource.data.uid == request.auth.uid && count(/databases/$(database)/documents/DataCollection, where: "uid", isEqualTo: request.auth.uid) < 10; // 更新和删除可按需调整,比如只允许用户修改/删除自己的文档 allow update, delete: if request.auth != null && resource.data.uid == request.auth.uid; } } }
规则说明
- 认证校验:
request.auth != null确保只有登录用户才能操作文档。 - 归属校验:
request.resource.data.uid == request.auth.uid保证用户只能创建属于自己的文档,无法替他人创建。 - 数量限制:
count(...) < 10统计当前用户在DataCollection中的文档总数,只有总数小于10时才允许创建新文档。
注意事项
- 该规则依赖Firestore的
count()函数(需规则版本2及以上),针对10条的限制场景,统计效率完全达标。 - 若使用批量写入,需确保批量中的每个文档都满足规则,否则整个批量操作会被拒绝。
- 用户删除文档后,总数回到10以下时,仍可继续创建新文档。
内容的提问来源于stack exchange,提问作者coure2011
相关产品推荐
相关产品推荐

