Firebase规则:使用父值进行验证?

时间:2013-09-18 14:36:34

标签: firebase firebase-security

我有这套规则:

{
  "rules": {
    "facebook_users": {
      "$user": {
        ".read": "$user == auth.id",
        ".write": "$user == auth.id",
        "userData": {
          "maxProjects": {
            ".validate": false
          },
        "userProjects": {
            ".validate": ???
          }
        }
      }
    }
  }
}

如果userProjects,我想让 用户无法将子项添加到userProjects.length > userData.maxProjects数组中。由于".validate": false规则,用户被拒绝在maxProjects中写入。如何将userProjects的长度与maxProjects进行比较?

如果不可能,那么这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

您可以使用root特殊变量和child()进行此比较:

{
  "rules": {
    "facebook_users": {
      "$user": {
        ".read": "$user == auth.id",
        ".write": "$user == auth.id",
        "userData": {
          "maxProjects": {
            ".validate": false
          },
          "userProjects": {
            ".validate": "data.val().length < root.child('facebook_users').child($user).child('userData/maxProjects').val()"
          }
        }
      }
    }
  }
}

答案 1 :(得分:1)

您是否阅读过this

  

<强>父()

     

获取父位置的RuleDataSnapshot   返回值RuleDataSnapshot - 父位置的RuleDataSnapshot。