pepeiborra / ad-account-validator
Valida las cuentas de usuario de una aplicación Laravel contra Active Directory: existencia del usuario, formato y correspondencia de uno o varios correos, con sugerencias de corrección.
Package info
github.com/JHOSEPDIES/ad-account-validator
pkg:composer/pepeiborra/ad-account-validator
Requires
- php: ^8.2
- directorytree/ldaprecord: ^3.0
- illuminate/console: ^10.0|^11.0|^12.0
- illuminate/contracts: ^10.0|^11.0|^12.0
- illuminate/database: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^9.0|^10.0
- phpunit/phpunit: ^11.0
Suggests
- livewire/livewire: Necesario para el panel de validación incluido (^3.0|^4.0)
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-10 23:39:06 UTC
README
Valida las cuentas de usuario de una aplicación Laravel contra Active Directory (vía LdapRecord):
- que la cuenta de acceso (
sAMAccountName) exista en el directorio; - que uno o varios correos guardados en tu tabla de usuarios tengan formato válido (
FILTER_VALIDATE_EMAIL) y coincidan con el correo institucional del directorio (mailo, si falta,userPrincipalName); un correo de otro dominio se acepta como externo si está bien escrito; - y que, cuando algo no coincide, se ofrezca una sugerencia tomada del directorio que se aplica solo si la aceptas.
Validar nunca modifica una cuenta. Incluye servicio, comando Artisan, evento de corrección y un panel Livewire opcional.
Instalación
composer require pepeiborra/ad-account-validator php artisan vendor:publish --tag=ad-account-validator-config
Requiere PHP 8.2+, Laravel 10/11/12, la extensión ext-ldap y directorytree/ldaprecord (se instala como dependencia). El panel necesita livewire/livewire 3 o 4.
Configuración
config/ad-account-validator.php:
'ldap' => [ 'connection' => env('AD_VALIDATOR_LDAP_CONNECTION'), // nombre de una conexión LdapRecord ya registrada, o null 'hosts' => explode(',', env('LDAP_HOSTS', '')), 'base_dn' => env('LDAP_BASE_DN'), 'username' => env('LDAP_USERNAME'), 'password' => env('LDAP_PASSWORD'), // port, version, use_ssl, use_tls, timeout ], 'users' => [ 'table' => 'users', 'key' => 'id', 'columns' => [ 'name' => 'name', // obligatoria 'login' => 'email', // cuenta del directorio; null si no aplica 'emails' => ['email_notification'], // una o varias columnas de correo 'active' => 'is_active', // opcional 'info' => ['unidad' => 'unit_name'], // columnas informativas ], 'scope' => ['deleted_at' => null], // condiciones fijas; null = IS NULL 'order_by' => 'name', ], 'directory' => [ 'login_attribute' => 'samaccountname', 'mail_attributes' => ['mail', 'userprincipalname'], 'proxy_attribute' => 'proxyaddresses', 'institutional_domains' => [], // vacío = se infiere del correo del directorio ],
Si en tu aplicación la columna email es la cuenta de acceso y guardas el correo real en otra columna, declara 'login' => 'email' y 'emails' => ['email_notification']. Si tienes dos correos, ponlos ambos en emails; cada uno se evalúa por separado.
Uso
Servicio
use Pepeiborra\AdAccountValidator\Services\AccountValidator; $validator = app(AccountValidator::class); $validator->listing(); // todos los usuarios con veredicto: valid | review | unchecked $validator->start(); // prepara la validación completa $validator->step(); // procesa un lote (batch_size) y guarda el avance en caché $validator->recheck($id); // valida una sola cuenta $validator->apply($id, 'email_notification', 'ana.lopez@conanp.gob.mx'); // aplica una sugerencia $validator->search('lopez'); // busca en el directorio por nombre, cuenta o correo
Cada resultado indica, por columna, uno de estos estados: ok, external, missing, invalid_format, differs, not_found, found_by_mail, unknown (cuando el directorio no respondió).
Comando
php artisan ad-validator:check # muestra la tabla (reutiliza la última validación) php artisan ad-validator:check --fresh # vuelve a consultar el directorio php artisan ad-validator:check --issues # solo las cuentas por revisar
Evento
Al aplicar una sugerencia se dispara Pepeiborra\AdAccountValidator\Events\AccountCorrected con key, column, before, after y directoryLogin, para que la aplicación lo asiente en su bitácora.
Panel Livewire
Ruta propia (recomendado, con tu autorización):
use Pepeiborra\AdAccountValidator\Livewire\AccountValidationDashboard; Route::get('/developer/cuentas-ad', AccountValidationDashboard::class) ->middleware(['auth', 'can:developer']);
O automática con AD_VALIDATOR_ROUTES_ENABLED=true (prefijo AD_VALIDATOR_ROUTES_PREFIX, middlewares en routes.middleware). El layout y el título se ajustan en dashboard. Para personalizar la vista: php artisan vendor:publish --tag=ad-account-validator-views.
El panel lista a todos los usuarios con su cuenta y correos, marca cada uno como Válido / Por revisar / Sin validar, valida por fila o todas en lotes con barra de progreso, muestra la sugerencia del directorio con el botón Aceptar sugerencia (con confirmación) e incluye un buscador del directorio.
Pruebas
composer install
composer test
Las pruebas usan Orchestra Testbench, SQLite en memoria y un directorio falso; no necesitan un Active Directory real.
Licencia
MIT.