fetch("SELECT id, is_system FROM roles WHERE slug = ?", [$slug]); if ($existing && (!$id || $existing['id'] !== $id)) { jsonError('Ya existe un rol con ese slug'); } if ($id) { // Actualizar $role = $db->fetch("SELECT id, is_system FROM roles WHERE id = ?", [$id]); if (!$role) jsonError('Rol no encontrado', 404); $db->query( "UPDATE roles SET name=?, slug=?, description=?, color=?, home_page=?, updated_at=NOW() WHERE id=?", [$name, $slug, $description, $color, $home_page, $id] ); // Reconstruir módulos solo si no es sistema, o siempre (admin puede editar módulos) $db->query("DELETE FROM role_modules WHERE role_id = ?", [$id]); } else { // Crear $db->query( "INSERT INTO roles (name, slug, description, color, home_page) VALUES (?,?,?,?,?)", [$name, $slug, $description, $color, $home_page] ); $id = $db->lastInsertId(); } // Insertar módulos foreach ($modules as $mod) { $mod = trim((string)$mod); if ($mod) { $db->query( "INSERT IGNORE INTO role_modules (role_id, module_slug) VALUES (?,?)", [$id, $mod] ); } } jsonOk(['id' => $id], $id ? 'Rol actualizado' : 'Rol creado');