如何在Firestore数据库中实现仅内容所有者的CRUD权限?
Firestore权限规则修复方案
你的问题出在创建文档时,resource.data尚未存在,导致规则里的request.auth.uid == resource.data.userid判断失败,触发权限不足错误。因为resource指的是已经存在于数据库中的文档,而创建操作(create)时,目标文档还未生成,无法读取resource.data。
需要针对不同操作类型拆分规则:
- 创建文档:验证写入的文档中
userid等于当前用户UID - 读取、更新、删除文档:验证现有文档的
userid等于当前用户UID
修改后的规则如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /notes/{noteId} { // 创建文档:已认证且写入的userid匹配当前用户 allow create: if request.auth != null && request.resource.data.userid == request.auth.uid; // 读取、更新、删除:已认证且现有文档userid匹配当前用户 allow read, update, delete: if request.auth != null && resource.data.userid == request.auth.uid; } } }
额外注意事项
- 确保创建文档时,
userid字段确实被正确写入(和Auth返回的UID完全一致,注意大小写、空格等细节) - 如果需要批量操作或子集合权限,再根据实际场景调整规则匹配路径(比如保留
{document=**})
内容的提问来源于stack exchange,提问作者axesmith99
相关产品推荐
相关产品推荐

