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

Firebase无法为唯一数据写入安全规则,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我希望我的vanNumber是唯一的 //vanwithagent is after root "/vanwithagent" vanwithagent : { "-KSHJyDyI49RpZwSkdg1" : { // "agentMobile" : "sdfs", "agentName" : "sdfsdf", "isAgentAssignedWithTask" : false, "vanName" : "fsdf", "vanNu

我希望我的
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())"
            }
        }
    }
  }
}
您无法检查Firebase安全规则中的某个值集合中是否存在某个值。您可以检查某个键是否存在以及某个键是否具有某个值。但这在这个数据模型中并没有帮助

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

vanwithagent : {
   "sf" : { // vanNumber
     "agentMobile" : "sdfs",
     "agentName" : "sdfsdf",
     "isAgentAssignedWithTask" : false,
     "vanName" : "fsdf",
     "vanPresentLocation" : {
       "currLattitude" : "N/A",
       "currLongitude" : "N/A",
       "pin" : "N/A"
     }
   }
 }
此数据结构保证van编号是唯一的,无需为其编写任何安全规则。

您无法检查Firebase安全规则中的某个值集合中是否存在某个值。您可以检查某个键是否存在以及某个键是否具有某个值。但这在这个数据模型中并没有帮助

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

vanwithagent : {
   "sf" : { // vanNumber
     "agentMobile" : "sdfs",
     "agentName" : "sdfsdf",
     "isAgentAssignedWithTask" : false,
     "vanName" : "fsdf",
     "vanPresentLocation" : {
       "currLattitude" : "N/A",
       "currLongitude" : "N/A",
       "pin" : "N/A"
     }
   }
 }
此数据结构保证了van编号是唯一的,而无需为其编写任何安全规则