Search by

pepeiborra / ad-account-validator

jhosepdies

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

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-master 2026-09-10 23:37 UTC

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 (mail o, 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.