Firestore规则下文档删除时Listener未触发的问题求助
解决Firestore监听文档删除事件不触发的问题
你的推测完全正确:文档删除后resource.data不存在,原规则无法匹配,导致Listener收不到删除通知。需要修改Firestore规则,加入对删除前文档状态的权限验证,确保原文档参与者能收到删除事件。
修改后的Firestore规则
match /games/{gameDoc=**} { allow read, write: if request.auth != null && ( // 文档存在时,验证当前用户是参与者 (exists(resource) && (resource.data.playerOne == request.auth.uid || resource.data.playerTwo == request.auth.uid)) || // 文档被删除时,验证当前用户是原文档的参与者 (!exists(resource) && (resourceBefore.data.playerOne == request.auth.uid || resourceBefore.data.playerTwo == request.auth.uid)) ); }
规则说明
request.auth != null:确保只有登录用户能访问,拦截未授权请求exists(resource):判断当前文档是否存在,存在时沿用原逻辑验证权限resourceBefore:Firestore提供的内置变量,代表操作前的文档快照,删除操作时会保留删除前的完整文档数据,通过它可以验证用户是否是原文档的参与者
修改后,当文档被删除时,规则会检查用户是否是原文档的playerOne或playerTwo,符合条件就会触发Listener,你的Unity代码里snapshot.ToDictionary() == null的分支就能正常执行删除后的逻辑。
内容的提问来源于stack exchange,提问作者Daniel Brunner
相关产品推荐
相关产品推荐

