Firestore规则问题:无suppliers集合时创建限制失效的解决需求
Firebase安全规则:处理供应商文档不存在的场景
修改后的规则代码如下:
function isNotRestrictedinSuppliers(){ const value = 3; const suppliersDocPath = /databases/$(database)/documents/users/$(request.auth.uid)/settings/suppliers; // 文档不存在时直接允许创建;存在则检查数组长度是否达标 if (!exists(suppliersDocPath)) { return true; } const suppliers = get(suppliersDocPath); return suppliers.data.suppliers_array.size() < value; } match /suppliers/{document=**}{ allow read, update, delete: if isSignedIn() && isValidUser(); allow create: if isSignedIn() && isValidUser() && (isPremium() || isNotRestrictedinSuppliers()); }
修改说明
- 解决文档不存在的报错问题:原代码直接用
get()读取不存在的文档会触发权限错误,现在先通过exists()判断文档是否存在,不存在时直接返回true允许创建,符合需求。 - 简化规则结构:原代码中两个
match /suppliers/...规则逻辑完全重复,合并为一个{document=**}规则,覆盖所有供应商子文档,减少冗余。 - 保留原有限制逻辑:当用户设置里的suppliers文档存在时,依然保留"高级用户或供应商数组数量小于3"的创建限制。
内容的提问来源于stack exchange,提问作者awariat
相关产品推荐
相关产品推荐

