Flutter中Firestore更新文档时权限被拒问题求助
解决Firestore更新权限拒绝问题
核心问题定位
你的规则中存在两个关键问题:
- 错误使用
document.ownerId访问文档字段:在Firestore规则里,document只是路径中的占位符变量,并非文档数据对象,已存在文档的字段需要通过resource.data访问。 - 路径变量
{uid}与权限判断逻辑脱节:规则路径中的{uid}未参与权限验证,可能导致路径匹配与权限判断不对应。
修正方案
方案一:通过路径变量直接验证权限(推荐)
如果classifiedAds下的第一层节点就是用户UID,且文档归属与该UID一致,可直接通过路径变量验证,无需依赖文档字段:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /classifiedAds/{ownerId}/{document=**} { allow read, create: if true; allow update, delete: if request.auth.uid == ownerId; } }
方案二:依赖文档ownerId字段验证
若必须通过文档内的ownerId字段判断权限,需修正字段访问方式:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /classifiedAds/{uid}/{document=**} { allow read, create: if true; allow update, delete: if request.auth.uid == resource.data.ownerId; } }
额外检查项
- 确认更新的文档路径严格符合
/classifiedAds/{uid}/xxx的结构 - 核对文档
ownerId字段值与当前用户UID完全一致(注意大小写、空格等细节) - 用Firestore控制台的规则模拟器模拟更新操作,定位具体权限判断失败点
内容的提问来源于stack exchange,提问作者Stéphane de Luca
相关产品推荐
相关产品推荐

