Firestore规则配置:如何允许创建文档但禁止更新?
解决Firestore允许创建但禁止更新的规则配置问题
你的规则看似禁止了更新操作,但实际setData能修改已有文档的原因是:Firestore中setData在文档已存在时会触发update操作,你需要更精准地限制只有新文档才能被写入。以下是两种正确的规则配置方案:
方案一:明确区分操作类型
直接针对create、update、delete操作分别配置权限:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /reservedUsernames/{username} { // 仅允许已认证用户创建新文档 allow create: if request.auth != null; // 完全禁止更新、删除已有文档 allow update, delete: if false; } } }
方案二:用exists()函数统一限制
通过判断文档是否存在,直接限制只有新建文档才能被写入,写法更简洁:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /reservedUsernames/{username} { // 仅允许已认证用户写入不存在的文档(即创建新文档) allow write: if !exists() && request.auth != null; } } }
额外注意事项
- 部署规则后,确保测试用的是已认证用户(规则要求
request.auth != null) - 确认你的
setData操作确实指向已存在的文档(比如searchableUsername的值是已创建的sam) - 即使
setData使用merge参数(如部分字段更新),仍属于update操作,会被上述规则拦截
内容的提问来源于stack exchange,提问作者Sotiris Kaniras
相关产品推荐
相关产品推荐

