{
  "rules": {
    "<your-geofire-node>": {
      // Allow anyone to read from this node
      ".read": true,

      // Index each location's geohash for faster querying
      ".indexOn": ["g"],

      // Schema validation
      "$key": {
        // Allow anyone to add keys in the GeoFire index, but not update or remove them
        ".write": "!data.exists()",

        // Key validation
        ".validate": "newData.hasChildren(['g', 'l']) && newData.getPriority().length <= 22 && newData.getPriority().length > 0",

        // Geohash validation
        "g": {
          ".validate": "newData.val() == newData.parent().getPriority()"
        },

        // Location coordinates validation
        "l": {
          "0" : {
            ".validate": "newData.isNumber() && newData.val() >= -90 && newData.val() <= 90"
          },
          "1" : {
            ".validate": "newData.isNumber() && newData.val() >= -180 && newData.val() <= 180"
          },
          "$other": {
            ".validate": false
          }
        },

        // Don't allow any other keys to be written
        "$other": {
          ".validate": false
        }
      }
    }
  }
}
