Fóir para SaaS
Tu producto es un único esquema que atiende a muchos clientes, y la mayor parte del trabajo consiste en mantener sus datos separados. En Fóir el esquema se comparte a propósito, y el aislamiento no es algo que tengas que escribir.
Un esquema y un solo lugar donde cambiarlo
La multitenencia suele obligar a elegir: un esquema con el que todos los clientes tienen que avanzar a la vez, o una bifurcación por cliente que nadie puede cambiar con seguridad un año después.
En Fóir un modelo se define una vez, en tu proyecto, y la organización de cada cliente dentro de él lo hereda. Hay una sola definición en lugar de una copia por cliente, así que editarla cambia lo que sirven todos ellos. Un cliente puede definir un modelo propio por debajo del tuyo sin bifurcar el resto de tu esquema.
Un esquema compartido no son datos compartidos
El fallo que no puedes permitirte es que un cliente lea las filas de otro, y en la mayoría de las pilas lo único que lo impide es una cláusula que alguien se acordó de escribir.
Cada cliente es una organización dentro de tu proyecto, y cada fila que escribe lleva su sello en la base de datos. El acceso lo aplica Postgres por debajo de tu aplicación, y no el camino de código que se esté ejecutando, de modo que una solicitud que no nombra a ningún cliente devuelve ninguna de sus filas en lugar de todas, y un nuevo lugar donde guardar datos no puede publicarse sin reglas que lo cubran. Ninguna lectura ni escritura en tu código nombra al cliente. Lo decide la credencial con la que se ejecuta, así que una consulta no puede apuntar al cliente equivocado.
Dar de alta a un cliente es una llamada a la API
Dar de alta a un cliente suele significar un script de aprovisionamiento que crea un tenant, le pone su marca, lo puebla con datos iniciales y deja a medias la mitad de eso cuando un paso falla.
Una sola llamada da de alta al cliente, identificado por un id que eliges tú. Crea su organización con su marca, y puede escribir sus ajustes, añadir a su primer miembro y generar una clave limitada a él. Hereda tus modelos de inmediato, sin ningún esquema que copiar. Si vuelves a llamar con el mismo id, se reanuda en el paso que no se completó en lugar de crear un segundo cliente.
Lo que te preguntará tu cliente más grande
El contrato que te lleva a un segmento superior llega con una revisión de seguridad, y la respuesta honesta suele ser un diagrama de intenciones.
Aquí el aislamiento es un mecanismo de la base de datos y no una política. Sus usuarios inician sesión en un dominio que les pertenece, en pantallas con su nombre y no el tuyo. Y si alguna vez piden sus datos, una exportación hecha como su organización contiene sus filas y las de ningún otro cliente, porque la regla que limita cada lectura limita también la exportación.
Con lo que empieza cada cliente
Las partes de un producto multitenant que, de otro modo, construirías una vez y mantendrías para siempre.
Inicio de sesión para sus usuarios
Registro, contraseña, código de un solo uso, proveedores sociales y OIDC, en un dominio que es del cliente.
Con su nombre
Logotipo, color, nombre del remitente y dirección de soporte por organización, usados en las pantallas y los correos que ven sus usuarios.
Una clave por cliente
Una clave confinada a un cliente no puede dirigirse a ningún otro lugar, diga lo que diga la solicitud. Tu back office guarda una clave y nombra al cliente en cada solicitud.
Roles dentro de su cuenta
Roles de cliente que declaras en la configuración, para que el propio equipo de tu cliente tenga administradores y miembros sin que construyas un sistema de permisos.
Mide lo que usan
Aplica una cuota a una operación por cliente en una ventana móvil y condiciónala al segmento en el que está, con los mismos públicos que personalizan su contenido.
Entornos con la misma forma
Un archivo de configuración nombra un proyecto de staging y un proyecto de producción, de modo que un cambio de esquema se ensaya en un lugar seguro antes de llegar a los clientes.
Uso por cliente
Registros, medios, usuarios activos y correos contados por organización, cada uno con un tope que puedes fijar, para que veas y limites lo que usa cada cliente.
Trabajo en segundo plano
Operaciones, programaciones y hooks de eventos por organización, con reintentos y un registro de lo ocurrido.
Medios
Una biblioteca de recursos con transformaciones y versiones adaptables, y reglas de acceso sobre los archivos.
Modélalo una vez y luego añade al segundo cliente
Crea un proyecto y sube los modelos sobre los que funciona tu producto. El siguiente cliente es una organización dentro de él.