parseArg('email'); $role = $this->parseArg('role') ?? self::ROLE_SUPERADMIN; if (empty($email)) { echo "Ошибка: Не указан email пользователя\n"; echo "\n"; echo "Использование:\n"; echo " php spark db:seed \"App\Database\Seeds\SetSystemRoleSeeder\" -email=admin@example.com -role=superadmin\n"; echo "\n"; echo "Доступные роли: user, admin, superadmin\n"; echo "По умолчанию: superadmin\n"; return; } $this->assignRole($email, $role); } /** * Парсинг аргумента из командной строки */ protected function parseArg(string $name): ?string { global $argv; foreach ($argv as $arg) { // Формат: -email=value if (preg_match("/^-{$name}=(.+)$/", $arg, $matches)) { return $matches[1]; } } return null; } /** * Назначение роли пользователю по email */ public function assignRole(string $email, string $role): bool { $userModel = new UserModel(); // Ищем пользователя по email $user = $userModel->where('email', $email)->first(); if (!$user) { echo "Ошибка: Пользователь с email '{$email}' не найден в базе данных\n"; return false; } // Отладка echo "DEBUG: Found user ID = " . $user['id'] . "\n"; echo "DEBUG: Current system_role = " . ($user['system_role'] ?? 'NULL') . "\n"; // Валидируем роль $validRoles = [self::ROLE_USER, self::ROLE_ADMIN, self::ROLE_SUPERADMIN]; if (!in_array($role, $validRoles)) { echo "Ошибка: Неизвестная роль '{$role}'. Доступные роли: " . implode(', ', $validRoles) . "\n"; return false; } // Используем DB Builder для обновления $db = \Config\Database::connect(); $result = $db->table('users') ->where('id', $user['id']) ->set('system_role', $role) ->update(); if (!$result) { echo "Ошибка обновления\n"; return false; } // Проверяем что обновилось $updatedUser = $userModel->find($user['id']); echo "DEBUG: New system_role = " . ($updatedUser['system_role'] ?? 'NULL') . "\n"; $roleLabels = [ self::ROLE_USER => 'Пользователь', self::ROLE_ADMIN => 'Администратор', self::ROLE_SUPERADMIN => 'Суперадмин', ]; $roleLabel = $roleLabels[$role] ?? $role; echo "Успех!\n"; echo " Email: {$email}\n"; echo " User ID: {$user['id']}\n"; echo " Назначенная роль: {$roleLabel}\n"; return true; } }