Has descrito tu aplicación a un agente de IA, has visto cómo se renderiza la interfaz en segundos y has iniciado sesión con éxito en tu nuevo panel de control. Parece un éxito rotundo. Invitas a tus primeros diez clientes y todo luce impecable. Pero detrás de los precios componentes de React y las suaves animaciones de Tailwind, podría estar gestándose un desastre silencioso.
Crear un portal de clientes es fundamentalmente diferente a crear un directorio público o una web app sencilla. En un portal de clientes, el aislamiento de datos es la única función que realmente importa. Si un cliente puede acceder a sus facturas, nunca debería poder ver las facturas de otro cliente.
Muchos desarrolladores usan generadores de código por IA para montar estos portales, confiando en la IA para configurar backends como Supabase. Pero confiar en la IA para escribir políticas de Seguridad a Nivel de Fila (RLS) es un atajo que a menudo acaba en fugas de datos.
He aquí por qué la seguridad de base de datos generada por IA es frágil y cómo los esquemas de permisos visuales ofrecen una vía más fiable para los portales de clientes.
La ilusión de la seguridad del frontend
Cuando construyes con asistentes de IA, estos tienden a escribir código que prioriza el feedback visual. La IA oculta un botón si el usuario no es administrador, o esconde una lista de registros si el correo del usuario no coincide con el del registro.
Esto es seguridad de frontend, y es totalmente inútil por sí sola.
Cualquier persona con un navegador puede abrir las herramientas de desarrollador, hacer clic en la pestaña de red e inspeccionar los payloads JSON entrantes. Si tu aplicación recupera todos los registros de clientes de la base de datos y los filtra en el frontend usando React o Vue, tus datos ya se han filtrado. Un atacante no necesita hackear tu servidor; solo tiene que pulsar F12 para ver los datos brutos que el código de tu frontend intentaba ocultar.
Para crear un portal seguro, debes filtrar los datos a nivel de base de datos antes de que viajen por la red. Si un cliente solicita una lista de proyectos, el motor de la base de datos debe inspeccionar la sesión, verificar la identidad y devolver únicamente las filas correspondientes.
En los proyectos creados con Supabase, esta seguridad de la base de datos depende enteramente de la Row-Level Security (RLS) de PostgreSQL.
Las vulnerabilidades de la RLS de Supabase generadas por IA
Supabase es una excelente opción de backend para aplicaciones personalizadas, pero traslada la carga de la seguridad a la configuración de la base de datos. Configurar la RLS requiere escribir políticas de PostgreSQL precisas mediante SQL.
Cuando delegas esto en un constructor de IA, introduces varios puntos de fallo.
1. Deriva de la ventana de contexto y complejidad de las relaciones
Escribir una política de RLS sencilla es fácil. Si un usuario es dueño de una fila, puede leerla. Basta con escribir una regla que compruebe si auth.uid() = user_id.
Pero los portales de clientes rara vez son así de simples. Normalmente tienes organizaciones, equipos, contratistas externos y diferentes roles. Un proyecto puede pertenecer a una organización, y un usuario puede ser miembro de esa organización con un rol específico. Para verificar si un usuario puede leer el registro de un proyecto, la base de datos debe consultar una tabla de unión.
A medida que el esquema de tu base de datos crece, la IA debe llevar la cuenta de todas estas relaciones. En el momento en que pides una nueva funcionalidad a la IA, puede producirse una deriva en la ventana de contexto. La IA podría escribir una nueva consulta que ignore la lógica de RLS existente o simplificar la política para que el código funcione, abriendo el acceso a usuarios no autorizados.
2. Fallos silenciosos en la lógica SQL
Las políticas de PostgreSQL fallan en silencio. Si escribes una política con errores, PostgreSQL no hará que tu app deje de funcionar. O bien bloqueará todo el acceso o, si está mal configurada, permitirá que cualquiera lea los datos.
Los modelos de IA suelen cometer errores sutiles con los valores nulos de SQL o la lógica booleana. Por ejemplo, una política como esta:
create policy "Users can view company data" on companies
for select using (
auth.uid() in (select user_id from members where company_id = id)
or public_access = true
);
Si el motor de la base de datos evalúa public_access como nulo, o si la subconsulta devuelve nulo de forma inesperada, la política podría evaluarse como verdadera para todos los usuarios autenticados. Una IA podría generar este código porque sintácticamente parece correcto, pero carece del manejo de casos límite necesario para entornos de producción reales.
3. La brecha de las pruebas
Los desarrolladores profesionales no se limitan a escribir políticas de RLS; escriben suites de pruebas para verificarlas. Utilizan herramientas como pgTAP para simular diferentes sesiones de usuario y confirmar que un cliente no pueda consultar los datos de otro.
Los generadores de código por IA no escriben estas pruebas a menos que se lo pidas explícitamente e, incluso entonces, ejecutar pruebas de seguridad a nivel de base de datos en un entorno generado por IA es complejo. Sin suites de pruebas automatizadas, solo puedes suponer que tus políticas son seguras. Solo te darás cuenta de que fallan cuando un cliente te llame para preguntar por qué puede ver el panel de control de otra empresa.
Esquemas de permisos visuales: la alternativa no-code
Si no quieres auditar código de PostgreSQL ni gestionar suites de pruebas, necesitas un paradigma de seguridad diferente. Los esquemas de permisos visuales, como los que se usan en Softr, sustituyen el código personalizado de la base de datos por reglas estructuradas y aplicadas por la plataforma.
En lugar de escribir sentencias SQL para filtrar filas, configuras tus reglas de acceso mediante un panel de ajustes visual.
Mapeo visual frente a scripting SQL
Mientras que las configuraciones tradicionales requieren escribir políticas de base de datos personalizadas, los constructores modernos se basan en ajustes visuales. En Softr, defines grupos de usuarios basándote en atributos de la base de datos. Por ejemplo, puedes crear un grupo llamado “Usuarios del Portal de Clientes” donde el ID de la empresa coincida con el ID de la empresa del usuario conectado.
Una vez definidos, aplicas estos grupos directamente a páginas, bloques y acciones. La plataforma gestiona el enrutamiento del backend y las consultas a la base de datos automáticamente. El bloque del frontend no recibe el conjunto de datos completo; en su lugar, el servidor filtra la fuente de datos antes de renderizar el bloque.
Bases de datos nativamente seguras
Cuando utilizas Softr Databases como capa de datos nativa, la seguridad a nivel de fila está integrada en la conexión desde el principio. No escribes reglas de seguridad directamente en las tablas de la base de datos - no hay SQL generado que auditar, ni scripts de migración que ejecutar, ni políticas que mantener. La capa de integración restringe el acceso a las consultas por defecto, por lo que no hay código generado que pueda derivar, romperse o exponer registros accidentalmente tras un cambio de esquema.
Si a un grupo de usuarios solo se le permite leer registros donde el estado es “Activo” y el campo de cliente coincide con su cuenta, el motor de la interfaz aplica este filtro a nivel de consulta. El cliente no puede manipular la solicitud de la API para obtener registros inactivos o filas de otros clientes porque el servidor del backend ignora los parámetros no autorizados.
Softr también se conecta a más de 17 fuentes externas - incluyendo Airtable y Google Sheets - por si necesitas importar datos que ya gestiones en otro lugar. Las mismas reglas visuales de grupos de usuarios se aplican independientemente de dónde residan los datos.
La carga de mantenimiento del código generado
Crear un portal de clientes no es un evento único. Tus reglas de negocio cambiarán. Añadirás nuevos niveles de clientes, introducirás estructuras de proyectos anidadas o cambiarás la forma en que los administradores revisan los documentos enviados.
En una aplicación de código generado construida con herramientas como Bolt o Lovable, cada cambio de diseño o actualización de relación requiere refactorizar el esquema de la base de datos y reescribir tus políticas de seguridad. Dependes de que la IA:
- Lea todo el código base para entender el esquema actual.
- Genere un script de migración sin romper los datos existentes.
- Reescriba las reglas de RLS para adaptarse a las nuevas relaciones.
- Actualice el frontend en React para enviar los headers y tokens correctos.
Este es el problema del “Día Dos”. Un solo prompt puede romper una política de seguridad que funcionaba anteriormente, y puede que no te des cuenta hasta que el código ya esté desplegado en producción.
Con Softr, realizas estos cambios sin tocar el código base. Puedes usar el AI Co-Builder para describir el cambio que necesitas - “añade un grupo de usuarios Manager que pueda aprobar el envío de proyectos” - y este actualizará los grupos de usuarios, las páginas y los permisos a la vez. O puedes hacer el cambio manualmente en el panel de ajustes si lo prefieres. En cualquier caso, no hay SQL generado que auditar después ni riesgo de que una regresión en la política de seguridad llegue silenciosamente a producción.
Mejores prácticas de seguridad para tu portal de clientes
Si estás creando un portal que maneja datos empresariales sensibles, ten en cuenta estas pautas:
Deja de confiar en los filtros del frontend
Nunca asumas que los datos están seguros solo porque están ocultos en la interfaz de usuario. Verifica siempre que tu API de backend o fuente de datos esté filtrando la información antes de enviarla. Si tu plataforma no admite filtrado seguro en el backend, no la uses para portales de clientes.
Mantén los roles de usuario simples
Evita las jerarquías de permisos excesivamente complejas. Si tus permisos son demasiado complicados para que un humano los audite fácilmente, una IA tendrá dificultades para escribirlos correctamente. Cíñete a grupos de usuarios claros y diferenciados como Administradores, Gestores y Clientes.
Elige herramientas estructuradas para software operativo
Los generadores de código por IA son fantásticos para validaciones, prototipos y la creación de interfaces de SaaS para consumidores. Pero cuando tu requisito principal es la seguridad operativa, el aislamiento de datos y la estabilidad a largo plazo, una plataforma no-code estructurada es la opción más segura.
Al aprovechar una plataforma que aísla las configuraciones de seguridad del código de diseño, te aseguras de que las actualizaciones de estilo nunca expongan accidentalmente tu base de datos a la internet pública. Obtienes un portal profesional y seguro sobre una base predecible, permitiéndote centrarte en tus clientes en lugar de depurar políticas de base de datos.