Supabase · RLS · B2B

¿Cómo expulsar a un miembro con una sesión abierta?

IndiePack··9 min lectura

Para expulsar a un miembro que aún tiene Next.js abierto, elimina o desactiva su membresía y haz que las políticas RLS y de Storage consulten esa relación en cada operación. No necesitas borrar su identidad global: las siguientes lecturas, escrituras, descargas y suscripciones deben fallar solo para la organización revocada.

Límite real: quitar un enlace del menú mejora la interfaz; retirar la membresía en las políticas corta el permiso.

Índice

  1. ¿Qué se revoca?
  2. ¿Cuál es la forma rápida?
  3. ¿Qué pasa con la pestaña?
  4. ¿Cómo se cortan archivos y Realtime?
  5. ¿Cómo se prueba?

¿Qué registro debe cambiar al expulsar a una persona?

Debe cambiar la membresía que une user_id, organización y rol. Borrar la cuenta de Auth sería excesivo si esa persona pertenece a otro espacio o mantiene un perfil personal.

Las políticas consultan una membresía activa para cada organización. Este modelo continúa la separación descrita en RLS multi-tenant con organizaciones, pero añade el ciclo de salida.

¿Cuál es la forma rápida: construirlo sobre IndiePack?

La forma rápida es partir de IndiePack, que combina Next.js 15, Supabase PostgreSQL con RLS, Storage y Realtime. Así puedes aplicar la misma membresía a filas, objetos y eventos en lugar de crear tres sistemas de permisos.

Ver IndiePackVer precio

¿Qué debe ocurrir en una pestaña que ya estaba abierta?

Debe dejar de obtener datos en cuanto haga una nueva petición y mostrar un estado de acceso retirado. El HTML ya descargado no puede borrarse a distancia, por lo que nunca debe contener secretos que solo estén ocultos visualmente.

En el cliente, trata una denegación como cambio de permiso: limpia la caché del espacio, cancela mutaciones pendientes y envía al selector de organización. No reintentes en bucle una operación que RLS ya ha rechazado.

¿Cómo se revocan también Storage y Realtime?

Storage se revoca haciendo que la política del objeto resuelva la misma organización y compruebe la membresía actual; los enlaces firmados ya emitidos duran hasta su caducidad, por eso deben ser breves. Realtime debe retirar el canal local y dejar que las políticas impidan nuevas lecturas.

La guía de Realtime aislado por tenant muestra por qué limpiar el canal es necesario incluso cuando la base de datos está cerrada correctamente.

¿Cómo se demuestra que la expulsión es inmediata y limitada?

Se demuestra con dos organizaciones, dos navegadores y un archivo privado. Expulsa al usuario en una pestaña y, desde la otra, intenta leer, escribir, descargar y recibir un evento sin recargar.

Comprueba después que el mismo usuario conserva el acceso a cualquier organización legítima y que una reinvitación crea una decisión explícita, no revive permisos ocultos. IndiePack encaja como base cuando quieres que la salida de un equipo sea tan coherente como su entrada.