Firestore规则问题:阻止含notes子集合的music删除失败
解决Firestore阻止含子集合的文档删除的规则问题
原规则失效的核心原因是:exists()函数仅支持检测单个文档的存在性,你传入的/musics/$(musicId)/notes是子集合路径而非具体文档路径,导致规则逻辑判断错误。
要实现「当notes子集合存在文档时阻止musics文档删除」的需求,需要通过通配符匹配子集合内的任意文档,修正后的规则如下:
match /databases/{database}/documents { match /musics/{musicId} { allow delete: if request.auth.uid != null && !exists(/databases/$(database)/documents/musics/$(musicId)/notes/{noteId}); } }
规则说明
- 添加
/{noteId}通配符后,exists()会检查notes子集合下是否存在任意文档:- 若子集合中有至少一个note文档,
exists()返回true,!exists(...)为false,删除操作被阻止; - 若子集合为空或不存在,
exists()返回false,!exists(...)为true,已认证用户可正常删除musics文档。
- 若子集合中有至少一个note文档,
内容的提问来源于stack exchange,提问作者Foxhunt
相关产品推荐
相关产品推荐

