Firebase数据库规则。当通配符的孩子=== auth.uid时允许

时间:2016-07-13 15:02:16

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

结构:

{
  "accounts" : {
    "JGeRgwAUBM..." : {
      "active" : true,
      "created" : 1468406951438,
      "key" : "JGeRgwAUBM..."
    }
}

规则:

{
  "rules": {
    ".read": false,
    ".write": false,    
    "accounts": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

目标: 我宁愿使用push()生成的密钥而不是使用auth.uid作为数据的密钥.getKey()

{
  "accounts" : {
    "theKeyIGetFrom: push().getKey()" : {
      "active" : true,
      "created" : 1468406951438,
      "auth_uid" : "JGeRgwAUBM..."
    }
}

寻找类似这样的规则集:

{
  "rules": {
    ".read": false,
    ".write": false,    
    "accounts": {
      "$key": {
        ".read": "$key.auth_uid === auth.uid",
        ".write": "$key.auth_uid === auth.uid"
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

回答你的问题,你将能够通过以下规则达到你想要的规则。

{
  "rules": {
    "accounts": {
      "$key": {
        ".read": "data.child(auth_uid).val() === auth.uid",
        ".write": "data.child(auth_uid).val() === auth.uid"
      }
    }
  }
}

但请记住,要检索和编写数据,您需要知道$key,因为您无法通过访问/accounts来获取任何数据。那是因为你没有读/写规则来访问特定的/accounts分支。

如果它在我手中,我宁愿选择你当前的/accounts/uid解决方案。您可以轻松地检索用户数据,因为您可以获得当前经过身份验证的用户uid。