Firebase Realtime Database新增invitation时权限被拒问题求解
问题根因
你的安全规则中newData的指向范围错误:
- 你将
.write规则配置在invitations集合的根节点,此时规则中的newData指向写入操作完成后整个invitations集合的全量数据,无法直接获取到单个邀请文档下的caseId字段,路径匹配失败导致权限被拒。 - 替换为固定caseId时路径拼接逻辑正确,因此规则可以正常生效。
修复方案
调整安全规则的作用层级,下钻到单个invitation文档级别,使用通配符$invitationId匹配单文档路径,此时newData将指向你当前写入的单个邀请文档数据,即可正确读取caseId值:
// 仅case所有者可添加invitations "invitations":{ "$invitationId": { // 新增caseId存在校验,避免无caseId时规则求值错误直接返回拒绝 ".write" :"newData.child('caseId').exists() && root.child('cases').child(newData.child('caseId').val()).child('owner').child(auth.uid).exists()", } },
可选优化
如果需要限制仅能新增邀请、不能修改/删除已存在的邀请,可以在规则中新增!data.exists()判断:
".write" :"!data.exists() && newData.child('caseId').exists() && root.child('cases').child(newData.child('caseId').val()).child('owner').child(auth.uid).exists()"
内容的提问来源于stack exchange,提问作者Mahmoud Niypoo
相关产品推荐
相关产品推荐

