是否可以在Firebase规则中访问$ location变量的子项?

时间:2016-08-23 06:57:32

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

拥有此数据结构:

users:{
    AYhiJQchwKSwG5p0epd1GrZAQMg2: {
      savedPhotos:{
        21142:true
        123:true
      }
      .
      .
    }
photos:{
    0:{
      id:9213
      install_count:4
    }
    .
    .
 }

我想限制用户不止一次保存照片。 像这样的东西: ...

"install_count":{
          ".write":"root.child('users/'+auth.uid).exists()" ,
          ".validate":"root.child('users/savedPhotos'+$photo.id).exists()"
        }

...

1 个答案:

答案 0 :(得分:1)

很抱歉迟到的回复...... 它应该是这样的:

"photos": {
    ".write": {
        ".validate":"root.child('users/savedPhotos/'+newData.child('id')).exists()"
    }
}

如果我可以建议...... 你应该避免:   - 使用数字作为密钥(您可能无法保证其唯一性),   - 直接保存数组(请检查此旧链接,但仍然有效AFAIK https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html)。

- 编辑 -

如果您只想验证install_count的写入:

"photos": {
    "$index": {
        "install_count": {
            ".validate":"root.child('users/savedPhotos/'+newData.parent().child('id')).exists()" 
        }
    }
}

价: firebase.google.com/docs/reference/security/database/#newdata firebase.google.com/docs/reference/security/database/#parent