Firebase安全 - 让每个用户自己写

时间:2017-03-29 04:32:42

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

我有以下结构的邻居'在火基地:

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-id。 我想让每个用户只写他自己,但要为他想要的每个其他用户做。 例如,我想让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
 }

但是我被许可拒绝了!

任何解决方案?

2 个答案:

答案 0 :(得分:0)

您的规则检查邻居对象的直接子节点。 看起来你正在写邻居对象的每个孩子的孩子。

例如,在上面的示例中,第一个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代表规则适用的密钥。

答案 1 :(得分:0)

试试这个:

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