Widget de Suplantación Rápida para Administradores en Filament
El proyecto landing ha recibido una nueva característica que mejora significativamente la experiencia de los administradores y desarrolladores durante las pruebas: un widget de suplantación rápida directamente en la página de usuarios del panel de administración.
Este widget está diseñado para agilizar el proceso de cambio entre diferentes tipos de usuarios para propósitos de prueba. Antes, un desarrollador o administrador podría necesitar cerrar sesión y volver a iniciarla con diferentes credenciales para verificar la interfaz de usuario y las funcionalidades específicas de cada rol. Con esta nueva adición, el proceso se simplifica enormemente.
Funcionalidad del Widget
El widget se sitúa estratégicamente encima de la lista de usuarios, presentando un usuario representativo para cada tipo de rol configurado en la aplicación (por ejemplo, "Usuario Regular", "Administrador de Marketing", "Administrador de Contenido", "Reclutador"). Junto a cada usuario representativo, hay un botón de "Suplantar" que permite a los administradores iniciar sesión instantáneamente como ese usuario específico.
Esto es particularmente útil para:
- Pruebas de Roles: Verificar rápidamente que las permisos y la interfaz de usuario se comportan como se espera para cada rol.
- Depuración: Replicar problemas reportados por usuarios específicos sin necesidad de solicitar sus credenciales.
- Desarrollo Rápido: Acelerar el flujo de trabajo durante el desarrollo de nuevas características que tienen interacciones complejas con los roles de usuario.
Implementación Técnica (Ejemplo Conceptual)
En un entorno como el de Laravel y Filament, una característica como esta podría implementarse utilizando componentes de Livewire para la interactividad. El proceso de suplantación típicamente implica cambiar la sesión de autenticación actual al usuario objetivo.
Consideremos un ejemplo simplificado de cómo se vería la lógica detrás de un botón de suplantación:
<?php
namespace App\Livewire\Admin;
use App\Models\User;
use Filament\Notifications\Notification;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
class ImpersonateUserWidget extends Component
{
public function impersonate(int $userId): void
{
$adminId = Auth::id(); // Guardar el ID del administrador actual
session(['impersonator_id' => $adminId]); // Almacenar para poder volver
Auth::loginUsingId($userId);
Notification::make()
->title('¡Suplantación exitosa!')
->body('Ahora estás actuando como ' . Auth::user()->name)
->success()
->send();
$this->redirect(route('filament.admin.pages.dashboard')); // Redirigir al dashboard o página principal del usuario
}
public function stopImpersonating(): void
{
if (session()->has('impersonator_id')) {
$adminId = session('impersonator_id');
Auth::loginUsingId($adminId);
session()->forget('impersonator_id');
Notification::make()
->title('Suplantación terminada')
->body('Has regresado a tu cuenta de administrador.')
->info()
->send();
$this->redirect(route('filament.admin.pages.dashboard'));
}
}
public function render()
{
$usersByRole = [
'Regular User' => User::whereHas('roles', fn ($query) => $query->where('name', 'regular'))->first(),
'Marketing Admin' => User::whereHas('roles', fn ($query) => $query->where('name', 'marketing-admin'))->first(),
// ... otros roles
];
return view('livewire.admin.impersonate-user-widget', [
'usersByRole' => $usersByRole,
]);
}
}
En este ejemplo, la clave es usar Auth::loginUsingId($userId) para cambiar la sesión y almacenar el ID del administrador original en la sesión (impersonator_id) para poder revertir la suplantación. Esto permite una transición fluida y segura.
La incorporación de este tipo de widget subraya el compromiso con la eficiencia del desarrollo y la facilidad de prueba en los proyectos, utilizando las capacidades de frameworks como Laravel y Filament para construir herramientas administrativas robustas.