Firebase: Reglas de la base de datos

Cuando creas una base de datos en Firebase se te ofrecen dos opciones iniciales, la primera consiste en crear una base de datos protegida y la segunda en crear una base de datos abierta para todos.

Normalmente cuando estás desarrollando comienzas con una base de datos abierta para todos, pero llega un momento en el que toca cerrar accesos y permitir lo mínimo posible a los usuarios para que nadie te haga un roto.

Para configurar los accesos a nivel de seguridad Firebase nos permite configurar una serie de reglas en formato json. Os pongo un ejemplo:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

Con esta regla estamos dando acceso universal de lectura y escritura a nuestra base de datos.

Os pongo otro ejemplo:

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

Con esta regla estamos dando permiso de lectura a todo el mundo a la colección de datos foo, pero no estamos dando permisos de escritura.

Las reglas permiten el uso de variables integradas:

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

En este ejemplo el usuario autentificado tiene permiso de escritura en la colección de su identificador de usuario dentro de la colección users.

Las reglas de la base de datos no cubren solo aspectos de seguridad, también ayudan a mantener la integridad de la base de datos, permiten también validar el contenido de los mismos:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

En este caso en la colección foo validamos que el dato sea una cadena de texto y tenga menos de 100 caracteres de longitud.

Podemos también definir los índices, estos nos permitirán hacer búsquedas de datos mucho más rápidas:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

En este caso en la colección dinosaurs ponemos como índices a height y a length, a la hora de hacer una búsqueda si la basamos en estos índices los resultados serán entregados a mucha más velocidad.


Comentarios