/** * Метод убеждается в том, что провайдер безопасности установлен. * Наша задача - установить провайдер один раз и проверить, чтобы он больше не менялся. */ public static function init() { self::$inited = check_condition(!self::$inited, 'Cannot initialize ' . __CLASS__ . ' twice'); if (self::$provider instanceof PsSecurityProvider) { //Провайдер безопастности был уже установлен } else { check_condition(is_null(self::$provider), __CLASS__ . ' is not correctly initialized'); if (PsContext::isCmd()) { //Если работаем под процессом - установим специальный провайдер безопастности self::$provider = new PsSecurityProviderCmd(); } else { //Устанавливаем базовый провайдер безопасности на основе сессии self::$provider = new PsSecurityProviderSdk(); } } check_condition(!PsContext::isCmd() || self::$provider instanceof PsSecurityProviderCmd, 'Invalid security provider for cmd process'); $LOGGER = PsLogger::inst(__CLASS__); if ($LOGGER->isEnabled()) { $LOGGER->info('Context: {}', PsContext::describe()); $LOGGER->info('Provider: {}', get_class(self::$provider)); $LOGGER->info('Is authorized: {}', var_export(self::$provider->isAuthorized(), true)); $LOGGER->info('Is admin: {}', var_export(self::$provider->isAuthorizedAsAdmin(), true)); $LOGGER->info('User ID: {}', self::$provider->getUserId()); } }
/** * Метод вызывается для инициализации окружения: * 1. Директория ресурсов окружения будет подключена в Autoload * 2. Файл, включающий окружение, будет выполнен */ public static function init() { if (self::$inited) { return; //--- } self::$inited = true; //--- /* * Проверим, нужно ли подключать окружение */ if (self::isSkipInclude()) { return; //--- } $env = self::env(); if (!$env) { return; //--- } $envDir = array_get_value($env, ConfigIni::environments()); if (!$envDir) { return PsUtil::raise('Environment [{}] not found', $env); } if (!is_dir($envDir)) { return PsUtil::raise('Environment dir for [{}] not found', $env); } $envSrcDir = next_level_dir($envDir, DirManager::DIR_SRC); $envIncFile = file_path($envDir, $env, PsConst::EXT_PHP); if (!is_file($envIncFile)) { return PsUtil::raise('Environment include file for [{}] not found', $env); } $LOGGER = PsLogger::inst(__CLASS__); if ($LOGGER->isEnabled()) { $LOGGER->info('Including \'{}\' environment for context \'{}\'', $env, PsContext::describe()); $LOGGER->info('Env dir: {}', $envDir); $LOGGER->info('Src dir: {}', $envSrcDir); $LOGGER->info('Inc file: {}', $envIncFile); } //Проинициализировано окружение self::$included = true; //Регистрируем директорию с классами, специфичными только для данного окружения Autoload::inst()->registerBaseDir($envSrcDir, false); //Выполним необходимое действие $PROFILER = PsProfiler::inst(__CLASS__); try { $LOGGER->info('{'); $PROFILER->start($env); self::initImpl($LOGGER, $envIncFile); $secundomer = $PROFILER->stop(); $LOGGER->info('}'); $LOGGER->info('Inc file included for {} sec', $secundomer->getTime()); } catch (Exception $ex) { $PROFILER->stop(false); $LOGGER->info('Inc file execution error: [{}]', $ex->getMessage()); throw $ex; //--- } }
/** * При инициализации: * 1. Получим из файла номер сессии * 2. Почистим/создадим директорию для логирования */ public function initAndWriteFirstLog() { $DM = PsLogger::DM(); $num = PsSequence::LOG()->next(); $num = pad_left("{$num}", 2, '0'); $logDirName = "session {$num}"; $DM->cd(null, $logDirName)->clearDir(); $fileCommon = $DM->absFilePath(null, '!session ' . $num, 'txt'); //Сделаем первую запись $date = date(DF_PS); $this->doAppend($fileCommon, self::SEPARATOR . " {$num}. [{$date}] " . self::SEPARATOR); $this->doAppend($fileCommon, 'SERVER: ' . (isset($_SERVER) ? print_r($_SERVER, true) : '')); $this->doAppend($fileCommon, 'REQUEST: ' . (isset($_REQUEST) ? print_r($_REQUEST, true) : '')); $this->doAppend($fileCommon, 'SESSION: ' . (isset($_SESSION) ? print_r($_SESSION, true) : '')); $this->doAppend($fileCommon, 'FILES: ' . (isset($_FILES) ? print_r($_FILES, true) : '')); $this->doAppend($fileCommon, 'CTXT: ' . PsContext::describe()); //Установим переменные класса $this->sessionDM = $DM; $this->sessionNUM = $num; $this->fileCommon = $fileCommon; }