Volveroctubre de 2026

TeamNotify: mensajería interna en tiempo real con acceso por roles

Next.jsTypeScriptTailwind CSSshadcn/uiSupabase
TeamNotify: mensajería interna en tiempo real con acceso por roles

Los anuncios por grupos de chat se pierden, llegan a quien no corresponde y no dejan rastro de quién los leyó. TeamNotify los reemplaza por un canal dirigido: un administrador envía un mensaje a un puesto (por ejemplo, "Depósito") y cada trabajador de ese puesto lo recibe al instante en su propia bandeja, con confirmación de lectura.

Los trabajadores nunca ven mensajes de otros puestos y nadie puede saltarse las reglas, ni siquiera llamando a la API directamente.

Por qué importa

Qué hace

Panel de administración

Bandeja del trabajador

Cuentas y acceso

Qué pasa cuando se envía un mensaje

  1. El administrador envía el mensaje desde el panel. La Server Action verifica que sea admin y valida los datos.
  2. Se inserta en la base de datos, donde la política de seguridad solo permite escribir a administradores.
  3. Un trigger de Postgres crea una confirmación de lectura por cada trabajador del puesto.
  4. Supabase Realtime avisa a cada bandeja, que pide el mensaje (la base solo lo entrega si el usuario es destinatario) y lo muestra con una notificación.
  5. Al abrirlo, una función de la base lo marca como leído, solo para el propio usuario.

Si el administrador reasigna el mensaje a otro puesto, otro trigger retira las confirmaciones anteriores y entrega el mensaje al nuevo puesto como no leído.

Decisiones de diseño

Seguridad

Defensa en profundidad: cada operación sensible se comprueba en varios niveles independientes.

Otras protecciones:

Verificación

El script security-tests.mjs ataca la API real como lo haría un atacante, solo con la clave pública y tokens de usuario: más de 55 comprobaciones automatizadas que cubren acceso anónimo, escalada de privilegios, lectura entre puestos, escrituras directas a tablas protegidas, abuso de funciones RPC, autorización de las Edge Functions, aislamiento de Realtime y acceso sin sesión a las rutas. Crea mensajes de prueba etiquetados y los elimina al terminar.

El esquema SQL también se validó en una instancia limpia de PostgreSQL: se aplica sin errores y la entrega de mensajes, la reasignación, las cascadas y el modelo de permisos se comportan como está documentado.

Stack

Alcance y límites conocidos

Lo que demuestra este proyecto