111 lines
3.3 KiB
PHP
Executable File
111 lines
3.3 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Script para crear el primer usuario administrador
|
|
* Ejecutar una sola vez: php create_admin.php
|
|
*/
|
|
|
|
// Cargar variables de entorno
|
|
if (file_exists(__DIR__ . '/.env')) {
|
|
$lines = file(__DIR__ . '/.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
|
foreach ($lines as $line) {
|
|
if (strpos(trim($line), '#') === 0) continue;
|
|
if (strpos($line, '=') === false) continue;
|
|
list($key, $value) = explode('=', $line, 2);
|
|
$_ENV[trim($key)] = trim($value);
|
|
}
|
|
}
|
|
|
|
require_once __DIR__ . '/shared/database/connection.php';
|
|
|
|
echo "========================================\n";
|
|
echo " CREAR USUARIO ADMINISTRADOR\n";
|
|
echo "========================================\n\n";
|
|
|
|
try {
|
|
$db = getDB();
|
|
|
|
// Solicitar datos del usuario
|
|
echo "Ingrese el nombre de usuario: ";
|
|
$username = trim(fgets(STDIN));
|
|
|
|
echo "Ingrese el email: ";
|
|
$email = trim(fgets(STDIN));
|
|
|
|
echo "Ingrese la contraseña: ";
|
|
$password = trim(fgets(STDIN));
|
|
|
|
echo "Ingrese el nombre completo: ";
|
|
$nombreCompleto = trim(fgets(STDIN));
|
|
|
|
if (empty($username) || empty($email) || empty($password)) {
|
|
die("❌ Error: Todos los campos son obligatorios\n");
|
|
}
|
|
|
|
// Verificar si el usuario ya existe
|
|
$stmt = $db->prepare("SELECT id FROM usuarios WHERE username = ? OR email = ?");
|
|
$stmt->execute([$username, $email]);
|
|
if ($stmt->fetch()) {
|
|
die("❌ Error: Ya existe un usuario con ese nombre de usuario o email\n");
|
|
}
|
|
|
|
// Obtener el rol de Admin
|
|
$stmt = $db->query("SELECT id FROM roles WHERE nombre = 'Admin' LIMIT 1");
|
|
$rol = $stmt->fetch();
|
|
|
|
if (!$rol) {
|
|
die("❌ Error: No se encontró el rol de Admin. Ejecute primero el schema.sql\n");
|
|
}
|
|
|
|
$rolId = $rol['id'];
|
|
|
|
// Obtener el idioma español por defecto
|
|
$stmt = $db->query("SELECT id FROM idiomas WHERE codigo = 'es' LIMIT 1");
|
|
$idioma = $stmt->fetch();
|
|
$idiomaId = $idioma ? $idioma['id'] : 1;
|
|
|
|
// Hash de la contraseña
|
|
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
|
|
|
|
// Insertar usuario
|
|
$stmt = $db->prepare("
|
|
INSERT INTO usuarios (username, email, password, nombre_completo, rol_id, idioma_id, activo)
|
|
VALUES (?, ?, ?, ?, ?, ?, 1)
|
|
");
|
|
|
|
$stmt->execute([
|
|
$username,
|
|
$email,
|
|
$passwordHash,
|
|
$nombreCompleto,
|
|
$rolId,
|
|
$idiomaId
|
|
]);
|
|
|
|
$userId = $db->lastInsertId();
|
|
|
|
// Asignar todos los permisos al admin
|
|
$stmt = $db->query("SELECT id FROM permisos");
|
|
$permisos = $stmt->fetchAll(PDO::FETCH_COLUMN);
|
|
|
|
$stmtPermiso = $db->prepare("INSERT INTO usuarios_permisos (usuario_id, permiso_id) VALUES (?, ?)");
|
|
foreach ($permisos as $permisoId) {
|
|
$stmtPermiso->execute([$userId, $permisoId]);
|
|
}
|
|
|
|
echo "\n========================================\n";
|
|
echo "✅ Usuario administrador creado exitosamente\n";
|
|
echo "========================================\n\n";
|
|
echo "Usuario: $username\n";
|
|
echo "Email: $email\n";
|
|
echo "Rol: Admin\n";
|
|
echo "ID: $userId\n";
|
|
echo "\nYa puede iniciar sesión en el sistema.\n\n";
|
|
|
|
} catch (PDOException $e) {
|
|
echo "❌ Error de base de datos: " . $e->getMessage() . "\n";
|
|
exit(1);
|
|
} catch (Exception $e) {
|
|
echo "❌ Error: " . $e->getMessage() . "\n";
|
|
exit(1);
|
|
}
|