Firebase云存储安全规则中使用Firestore文档引用遇权限错误
解决Firebase云存储安全规则中Firestore文档引用权限校验失败的问题
问题出在类型不匹配:你构造的/databases/(default)/documents/users/$(request.auth.uid)是字符串路径,但Firestore文档team数组里存的是DocumentReference对象,云存储规则不会像Firestore规则那样自动做类型转换,直接用in判断永远返回false,导致权限校验失败。
修正方法是把数组里的DocumentReference转换成路径字符串再做匹配,用ref.path获取引用的字符串路径,结合any()遍历数组检查匹配:
allow write: if exists( /databases/(default)/documents/businesses/$(businessDocId) ) && ( get(/databases/(default)/documents/businesses/$(businessDocId)).data.team .any(ref => ref.path == /databases/(default)/documents/users/$(request.auth.uid)) );
补充说明:
- 先调用
exists()判断业务文档是否存在,避免get()因文档不存在抛出错误导致规则直接拒绝请求 any()方法会遍历数组,只要有一个元素的路径匹配用户文档路径,就返回true
内容的提问来源于stack exchange,提问作者Moody
相关产品推荐
相关产品推荐

