如何在Firestore规则中进行字符串拼接?附问题代码示例
Firebase安全规则:正确拼接文档ID路径
你的问题出在Firebase安全规则的路径引用语法上——不能先拼接成完整字符串再用$(...)插值,而是要直接在路径中拼接文档ID的各个部分。另外,必须先检查文档是否存在,否则当groupMembership文档不存在时,get()会抛出错误导致规则失效。
修正后的规则代码如下:
match /comments/{document=**} { function checkIfHasMembership(groupId, userId) { // 直接在路径中拼接groupId和userId作为文档ID let membershipDocRef = /databases/$(database)/documents/groupMemberships/$(groupId + userId); // 先检查文档是否存在,再验证userId return exists(membershipDocRef) && get(membershipDocRef).data.userId == userId; } allow read: if true; allow write: if checkIfHasMembership(resource.data.groupId, request.auth.uid); }
关键说明:
- Firebase安全规则中,路径里的
$(...)支持表达式运算,所以可以直接用$(groupId + userId)来拼接文档ID,无需提前组装成字符串变量。 - 必须添加
exists(membershipDocRef)判断,避免因文档不存在触发的规则错误,同时也符合权限逻辑:只有当用户的成员关系文档存在时,才允许写入。
内容的提问来源于stack exchange,提问作者Yordan Mansarliyski
相关产品推荐
相关产品推荐

