Example #1
0
 /**
  * Метод убеждается в том, что провайдер безопасности установлен.
  * Наша задача - установить провайдер один раз и проверить, чтобы он больше не менялся.
  */
 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());
     }
 }
Example #2
0
 /**
  * Метод вызывается для инициализации окружения:
  * 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;
         //---
     }
 }
Example #3
0
 /**
  * При инициализации:
  * 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;
 }