Trafikoa

Hoy ha nevado y el mapa de Trafikoa.eus se cuelga en el iPhone, así que partiendo de los datos de de incidencias de tráfico en tiempo real en formato XML sacado de Open Data Euskadi y el código fuente de EuskoEvents he creado un Frankestein hecho de retales.

Para variar, problemas con los datos: el fichero XML en su cabecera dice que está codificado como ISO-8859-1 y el servidor lo envía como UTF-8; un rato perdido hasta dar con el modo de arreglarlo.

Reglas de seguridad de Firestore

Hasta ahora no nos hemos preocupado por la seguridad de los datos que estamos almacenando, pero tenemos que configurar correctamente las reglas de acceso a nuestra base de datos si no queremos tener problemas. Cada usuario sólo tiene que poder acceder a la información que definamos, y a nada más.

Para conseguirlo vamos a definir reglas de seguridad de Firestore que se aplican automáticamente en cada acceso a la base de datos, creando un mecanismo de protección muy eficaz.

Veamos como:

Perfeccionando el modelo de datos

Mientras empezaba a pensar en cómo aplicar las reglas de seguridad incorporadas de Firestore, me he dado cuenta de que le puedo hacer un cambio interesante al modelo de datos y simplificar el funcionamiento.

Voy a eliminar la colección de usuarios (Firebase ya se encarga de guardar la lista de usuarios y proporcionar el UID del usuario actual) y guardar en cada lista el UID del usuario al que pertenece.

Eso permite que:

  • El modelo sea más simple.
  • Las reglas de seguridad se puedan escribir de modo más efectivo (sólo dejaremos acceder a un documento concreto a su propietario).
  • Si en algún momento nos planteamos compartir listas, sólo habría que añadir los UIDs a esas listas compartidas.

El diagrama actualizado queda así (lo que está en gris desaparece):

Vamos a desarrollarlo:

Nueva lista

Para crear una nueva lista tenemos que completar varias tareas:

  • Crear un segue de tipo unwind para retornar los datos al ViewController principal.
  • Extraer el valor del formulario de Eureka.
  • Actualizar nuestro TableView.
  • Guardar los datos en Firestore.

Vamos a aprovechar para empezar a usar las capacidades de actualización en tiempo real de Firestore, lo que nos va a dar muchas posibilidades interesantes.