/** * Получение объекта текущего пользователя * @return modelUsers */ public static function current() { // TODO тут надо как-то унифицировать return joosCore::is_admin() ? joosCoreAdmin::user() : self::instance(); }
*/ // Установка флага родительского файла define('_JOOS_CORE', 1); // рассчет памяти function_exists('memory_get_usage') ? define('_MEM_USAGE_START', memory_get_usage()) : null; // считаем время за которое сгенерирована страница $sysstart = microtime(true); // корень файлов панели управления define('JPATH_BASE_ADMIN', __DIR__); require_once dirname(JPATH_BASE_ADMIN) . DIRECTORY_SEPARATOR . 'core' . DIRECTORY_SEPARATOR . 'joostina.php'; require_once JPATH_BASE . DS . 'core' . DS . 'admin.root.php'; joosDocument::header(); // работа с сессиями начинается до создания главного объекта взаимодействия с ядром joosCoreAdmin::start(); // стартуем пользователя joosCoreAdmin::init_user(); if (helperAcl::is_allowed('admin_panel::init') !== true) { joosRoute::redirect(JPATH_SITE_ADMIN, 'В доступе отказано'); } ob_start(); joosAutoadmin::dispatch(); joosDocument::set_body(ob_get_clean()); ob_start(); // начало вывода html // загрузка файла шаблона $template_file = JPATH_BASE . DS . 'app' . DS . 'templates' . DS . JTEMPLATE_ADMIN . DS . 'index.php'; if (file_exists($template_file)) { require_once $template_file; } else { throw new joosException('Файл index.php шаблона :template_name не найден', array(':template_name' => JTEMPLATE_ADMIN)); }
public static function init_user() { $option = joosRequest::param('option'); // logout check if ($option == 'logout') { $database = joosDatabase::instance(); // обновление записи последнего посещения панели управления в базе данных if (isset($_SESSION['session_user_id']) && $_SESSION['session_user_id'] != '') { $query = "UPDATE #__users SET lastvisit_date = " . $database->get_quoted(JCURRENT_SERVER_TIME) . " WHERE id = " . (int) $_SESSION['session_user_id']; $database->set_query($query)->query(); } // delete db session record corresponding to currently logged in user if (isset($_SESSION['session_id']) && $_SESSION['session_id'] != '') { $query = "DELETE FROM #__users_session WHERE session_id = " . $database->get_quoted($_SESSION['session_id']); $database->set_query($query)->query(); } session_destroy(); joosRoute::redirect('index.php'); } if (session_name() != JADMIN_SESSION_NAME) { joosRoute::redirect(JPATH_SITE_ADMIN, 'Ошибка сессии'); } $my = new modelUsers(); $my->id = joosRequest::int('session_user_id', 0, $_SESSION); $my->user_name = joosRequest::session('session_user_name'); $session_id = joosRequest::session('session_id'); $logintime = joosRequest::session('session_logintime'); if ($session_id != session_id()) { joosRoute::redirect(JPATH_SITE_ADMIN, 'Вы не авторизованы'); } // check to see if session id corresponds with correct format if ($session_id == md5($my->id . $my->user_name . $logintime)) { $task = joosRequest::param('task'); if ($task != 'save' && $task != 'apply') { $database = joosDatabase::instance(); $session_life_admin = joosConfig::get2('session', 'life_admin'); // purge expired admin sessions only $past = time() - $session_life_admin; $query = "DELETE FROM #__users_session WHERE time < '" . (int) $past . "' AND guest = 1 AND user_id <> 0"; $database->set_query($query)->query(); // update session timestamp $query = "UPDATE #__users_session SET time = " . $database->get_quoted(time()) . " WHERE session_id = " . $database->get_quoted($session_id); $database->set_query($query)->query(); // set garbage cleaning timeout self::set_session_garbage_clean($session_life_admin); // check against db record of session $query = "SELECT COUNT( session_id ) FROM #__users_session WHERE session_id = " . $database->get_quoted($session_id) . " AND user_name = " . $database->get_quoted($my->user_name) . " AND user_id = " . (int) $my->id; $count = $database->set_query($query)->load_result(); // если в таблице нет информации о текущей сессии - она устарела if ($count == 0) { setcookie(JADMIN_SESSION_NAME); // TODO тут можно сделать нормальную запоминалку последней активной страницы, и разных данных с неё. И записывать всё это как параметры пользователя в JSON joosRoute::redirect(JPATH_SITE_ADMIN, 'Вы не авторизованы'); } } } elseif ($session_id == '') { joosRoute::redirect(JPATH_SITE, 'Вы не авторизованы'); } else { joosRoute::redirect(JPATH_SITE, 'Вы не авторизованы'); exit; } self::$user = $my; }
/** * Получение инстанции текущего авторизованного пользователя * Функция поддерживает работу и на фронте и в панели управления сайта * * @tutorial joosCore::user() => Объект пользователя modelUsers * * @return modelUsers */ public static function user() { return self::$is_admin ? joosCoreAdmin::user() : modelUsers::instance(); }