Firebase可防止重复键

时间:2016-05-30 12:01:05

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

我有终点:

/schools/$schoolId/rooms/$roomName/id
/schools/$schoolId/rooms/$roomName/name {must be unique ignoring case} 
/schools/$schoolId/rooms/$roomName/{other attributes not relevant i think}

我希望没有两个房间具有相同的名称,因此我将其存储为密钥。我在设置值之前将名称转换为小写,因此我有以下安全规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "schools":{
      "$schoolId":{
        "rooms":{
          "$roomName":{
            ".validate": "$roomName===newData.child('name').val().toLowerCase() && !data.parent().child(newData.child('name').val().toLowerCase()).exists()"
          }
        }
      }
    }
  }
}

这些规则不允许我写任何新房间。

1 个答案:

答案 0 :(得分:0)

您可以在单个房间内为属性名称提供角色 像这样:

"rooms":{

 //A Room 
 "$roomId": {
    "name": {
        ".write": "!data.exists()"
    }
  }  
}