Primer commit del sistema separado falta mejorar mucho
This commit is contained in:
110
create_admin.php
Executable file
110
create_admin.php
Executable file
@@ -0,0 +1,110 @@
|
||||
<?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);
|
||||
}
|
||||
Reference in New Issue
Block a user