Firestore安全规则疑问:用户能否修改他人集合中含自身ID的文档?
Firestore规则问题解答
核心结论
你当前设置的规则完全开放了权限,userB可以随意修改userA的friendsCollection中ID为userB的文档,因为规则里的if true没有做任何身份校验,所有用户都能读写users路径下的所有资源。
实现需求的正确规则
如果你想达到「仅允许用户修改父级{userDocID}属于自身的内容」,也就是用户只能操作自己账号对应的users文档下的子集合数据,需要调整规则如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 匹配users下的根文档 match /users/{userDocID} { // 用户只能读写自己的根文档 allow read, write: if request.auth.uid == userDocID; // 匹配friendsCollection下的所有文档 match /friendsCollection/{friendDocID} { // 仅允许文档所属用户(userDocID)操作该子集合下的所有好友记录 allow read, write, delete: if request.auth.uid == userDocID; } // 匹配notificationsCollection下的所有文档 match /notificationsCollection/{notifDocID} { // 仅允许文档所属用户(userDocID)操作自己的通知记录 allow read, write, delete: if request.auth.uid == userDocID; } } } }
规则说明
- 上述规则中,只有当请求用户的UID等于
userDocID时,才能操作该userDocID对应的文档及其子集合内容 - 按照这个规则,userB只能操作
users/userB路径下的所有资源,无法修改users/userA/friendsCollection/userB的内容,符合你的预期
内容的提问来源于stack exchange,提问作者whatwhatwhat
相关产品推荐
相关产品推荐

