【问题标题】:Firebase security - let each user to write himselfFirebase 安全——让每个用户自己写
【发布时间】:2017-03-29 18:28:09
【问题描述】:

我在 Firebase 中有以下“邻居”结构:

neighbors: {
user100:{
    user200:{
        from:'1.2'
    },
    user300:{
        from:'4.2'
    },
    user400:{
        from:'2.4'
    }
},
user700:{
    user200:{
        from:'8.7'
    },
    user500:{
        from:'10.3'
    }
}

}

支持 user100,user200 是 auth-ids。 我想让每个用户只写他自己,而是为他想要的每个其他用户写。 例如,我想让user200写他是user500的邻居,但我不想让他写其他用户(比如用户800)是某人的邻居。

我很努力,但没有成功。 默认情况下,我尝试了以下解决方案,但仍然无法正常工作!!! 解决方案是将结构更改为:

neighbors:  {
user100:{
    user200:{
        from:'1.2',
        neighbor:'user200'
    },
    user300:{
        from:'4.2',
        neighbor:'user300'
    },
    user400:{
        from:'2.4',
        neighbor:'user400'
    }
},
user700:{
    user200:{
        from:'8.7',
        neighbor:'user200'
    },
    user500:{
        from:'10.3',
        neighbor:'user500'
    }
}

  }

规则是:

 neighbors:{
    ".write":"newData.child('neighbor').val() == auth.uid
 }

但是我的权限被拒绝了!

有什么办法吗?

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-security


    【解决方案1】:

    您的规则检查邻居对象的直接子对象。 似乎您正在写给邻居对象的每个孩子的孩子。

    例如,在上面的示例中,第一个 neighbor 值的路径类似于 neighbor/user100/user200/neighbor

    规则必须是这样的。

    neighbors:{
        $user_id {
            ".write":"newData.child('neighbor').val() == auth.uid"
        }
    }
    

    或者,如果您只想检查父键,它们似乎与邻居 (?) 的值相同:

    neighbors:{
        $user_id {
            ".write":"$user_id == auth.uid"
        }
    }
    

    在这些示例中,$user_id 是规则适用的键的替代。

    【讨论】:

      【解决方案2】:

      试试这个:

          "neighbors":{
          "$user_id":{
              ".write":"newData.child('neighbor').val() == auth.uid"
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-10
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多