Firebase无法为唯一数据编写安全规则

时间:2016-09-22 15:18:53

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

我希望我的vanNumber是唯一的

//vanwithagent is after  root "/vanwithagent"

vanwithagent : {
   "-KSHJyDyI49RpZwSkdg1" : { //
     "agentMobile" : "sdfs",
     "agentName" : "sdfsdf",
     "isAgentAssignedWithTask" : false,
     "vanName" : "fsdf",
     "vanNumber" : "sf",
     "vanPresentLocation" : {
       "currLattitude" : "N/A",
       "currLongitude" : "N/A",
       "pin" : "N/A"
     }
   }
 }

我写过的规则:

{
  "rules": { //Rules
    ".read": "auth != null",
    ".write": "auth != null",
    "vanwithagent": {
        "$vanwithagentId": {
            "vanNumber":{
                ".validate":"!(root.child('vanwithagent').child(data.child('vanNumber').val()).exists())"
            }
        }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您无法检查Firebase安全规则中某些值集合中是否存在。如果某个键具有特定值,您可以检查某个键是否存在。但是这并不能帮助你掌握这个数据模型。

通常,解决方案是选择符合您要求的数据模型。如果vans是唯一且具有id,则存储键入该id的列表:

vanwithagent : {
   "sf" : { // vanNumber
     "agentMobile" : "sdfs",
     "agentName" : "sdfsdf",
     "isAgentAssignedWithTask" : false,
     "vanName" : "fsdf",
     "vanPresentLocation" : {
       "currLattitude" : "N/A",
       "currLongitude" : "N/A",
       "pin" : "N/A"
     }
   }
 }

此数据结构保证 van编号是唯一的,而不为其编写任何安全规则。