Configuración y acceso a la consola de administración
Ejecuta y despliega la aplicación de administración separada, asigna operadores, exige MFA y configura su origen dedicado.
Sincronizado con el commit
7d452a6del starter.
El starter incluye una consola operativa en apps/admin. Es una segunda aplicación Next.js, no una ruta /admin dentro de la aplicación para clientes. Esta separación permite desplegar la consola en un origen dedicado y protegido, y publicarla de forma independiente, aunque comparte autenticación, esquema de base de datos, modelos y servicios.
Ejecución local
Completa primero la configuración habitual del starter, crea un usuario desde la aplicación pública y ejecuta la aplicación de administración:
pnpm dev:adminEscucha en http://localhost:3001. Los comandos relacionados son:
pnpm build:admin
pnpm start:adminDefine el origen local de administración en .env:
NEXT_PUBLIC_ADMIN_WEB_URL=http://localhost:3001Cuando existe ese valor, la compilación de administración lo usa como origen de Better Auth, salvo que el shell o el entorno de despliegue proporcione de forma explícita BETTER_AUTH_URL o NEXT_PUBLIC_AUTH_BASE_URL. Como NEXT_PUBLIC_ADMIN_WEB_URL queda incorporada durante la compilación, un cambio en producción exige volver a desplegar.
Asignar un operador
El acceso de plataforma se guarda en users.role y es independiente de los roles owner, admin y member de una organización.
admin_ropuede entrar en la consola y consultar datos operativos.admin_rwtambién puede ejecutar las acciones de escritura de la consola.
Asigna el rol a una cuenta existente desde la raíz del repositorio:
pnpm admin:promote operator@example.com admin_rwEl comando usa admin_rw por defecto, admite --dry-run y se niega a adivinar cuando un mismo correo pertenece a más de un proveedor de inicio de sesión. En ese caso, selecciona la cuenta exacta con --provider, por ejemplo:
pnpm admin:promote operator@example.com --role admin_ro --provider googleLa autorización nunca resuelve el rol mediante el correo. El servidor carga el usuario de base de datos que coincide con el ID o UUID único de la sesión y comprueba el rol almacenado en cada página y ruta API protegida.
MFA es obligatorio
El rol de administración no basta. Cada operador debe activar la autenticación de dos factores de Better Auth desde la interfaz pública de la cuenta. Un operador con rol de administración pero sin MFA es enviado a /mfa-required; después de activarlo, completa el desafío /two-factor de la aplicación de administración.
Las cuentas que solo usan Google necesitan una contraseña antes de poder activar la autenticación de dos factores en Better Auth. La interfaz pública de la cuenta ofrece Establecer una contraseña para ese caso. El inicio de sesión con Google sigue funcionando después.
El acceso de administración utiliza el mismo endpoint de correo con desafío que la aplicación pública. Por ello, el despliegue de administración también necesita NEXT_PUBLIC_TURNSTILE_SITE_KEY y TURNSTILE_SECRET_KEY cuando la protección captcha está activa.
Despliegue separado
Crea un segundo proyecto de alojamiento desde el mismo repositorio y ejecuta pnpm build:admin. Asígnale un origen dedicado, como https://admin.example.com.
La aplicación de administración importa el validador compartido del entorno de producción. Por ahora necesita todo el conjunto de variables obligatorias de producción, aunque una pantalla de administración no use directamente cada proveedor. Parte de las variables de producción de la aplicación para clientes, compáralas con .env.example y sigue Despliegue y seguridad. Después ajusta los valores específicos de administración:
- conserva los mismos
DATABASE_URLyBETTER_AUTH_SECRETque usa la aplicación para clientes; - configura
NEXT_PUBLIC_ADMIN_WEB_URLcon el origen de administración (el build también lo usa para las URL de Better Auth salvo que las sobrescribas explícitamente); - proporciona un par de claves de Turnstile válido para el hostname de administración; reutiliza las claves del sitio público solo si su configuración admite ese hostname;
- elige un límite
ADMIN_MAX_CREDIT_GRANTadecuado para el producto (el valor predeterminado es100000).
Mantén separados los orígenes web y de administración. La aplicación de administración envía cabeceras noindex, nofollow, noarchive y no-store, además de políticas restrictivas de marcos, referencia y seguridad de contenido. Estas cabeceras reducen la exposición, pero no sustituyen la autorización: el layout del servidor y cada API de administración comprueban rol y MFA.
Lista de comprobación
- Compila la consola con
pnpm build:admin. - Confirma que el origen de administración y la URL base de autenticación apuntan al mismo despliegue.
- Inicia sesión como
admin_roy comprueba que los datos son visibles pero las escrituras no están disponibles. - Inicia sesión como
admin_rw, completa MFA y prueba una escritura reversible. - Confirma que la acción aparece en
/audit. - Confirma que un usuario normal no puede abrir una página ni llamar a una API de administración.
Continúa con Páginas y operaciones de la consola para ver las superficies que incluye la versión actual.