Firebase实时数据库规则-写入时在数据键值对中使用变量作为键

问题描述 投票:0回答:1

这是我的数据库的大致示例。

"userA": {
    "uf": {
        "userB": "0"
    }
},
"users": {
    "userA": "0",
    "userB": "0",
    "userC": "0"
}

这是我要编写的规则的粗略示例。

//USER ID
"$uid": {

  //USER FRIENDS
  "uf": {

    //FRIEND USER ID
    "$fuid": {

      ".write": "$uid === auth.uid &&
      root.child('users').hasChild($fuid)",
    }
  },
},

这就是我要在模拟器中进行的工作

//Location /userA/uf/

//Data { "userC": "0" }

当数据键值对的“键”是我的规则中的变量(在本例中为“ $ fuid”)时,安全规则似乎总是拒绝写入。模拟器将返回消息“拒绝模拟集”和“拒绝写入”,但不会提供任何其他详细信息。我可以通过编写以下内容解决此问题。

//Simulation Method set

//Location /userA/uf/userC/

//Data { "0": "0" }

但是这感觉就像是在向我的数据库写入不必要的数据。最佳做法是什么?谢谢。

firebase-realtime-database standards firebase-security
1个回答
0
投票

您的规则可以访问{uid}/uf/{fuid},但您正在尝试在{uid}/uf处书写。

您不需要全部写{"0": "0"},只需在"0"处写{uid}/uf/{fuid}

© www.soinside.com 2019 - 2024. All rights reserved.