Source for file AuthUser.class.php

Documentation is available at AuthUser.class.php

  1. /**
  2.  * Класс AuthUser.
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author 1m.dm
  7.  * @copyright ColoCall 2006
  8.  * @version $Id: fsource_energine_core_frameworkAuthUser.class.php.html,v 1.1 2007/09/17 14:32:32 pavka Exp $
  9.  */
  10.  
  11. require_once 'core/framework/User.class.php';
  12.  
  13. /**
  14.  * Аутентифицированный пользователь.
  15.  *
  16.  * @package energine
  17.  * @subpackage core
  18.  * @final
  19.  */
  20. final class AuthUser extends User {
  21.  
  22.     /**
  23.      * @access private
  24.      * @static
  25.      * @var AuthUser единый для всей системы экземпляр класса AuthUser
  26.      */
  27.     private static $instance;
  28.  
  29.     /**
  30.      * Возвращает единый для всей системы экземпляр класса AuthUser.
  31.      * См. паттерн проектирования Singleton.
  32.      *
  33.      * @access public
  34.      * @static
  35.      * @return AuthUser 
  36.      */
  37.     public static function getInstance({
  38.         if (!isset(self::$instance)) {
  39.             self::$instance new AuthUser;
  40.         }
  41.         return self::$instance;
  42.     }
  43.  
  44.     /**
  45.      * Конструктор класса.
  46.      * параметр введен только для избежания strict ошибки
  47.      *
  48.      * @param false 
  49.      * @access private
  50.      * @return void 
  51.      * @todo избавиться от hardcoded имен полей формы?
  52.      */
  53.     public function __construct($id false{
  54.         parent::__construct(false);
  55.         //Если пришел флаг  - отлогиниться
  56.         if (isset($_POST['user']['logout'])) {
  57.             //Очищаем информацию о пользователе
  58.             $this->clearInfo();
  59.             return;
  60.         }
  61.         elseif (isset($_SESSION['userID'])) {
  62.             $id $_SESSION['userID'];
  63.         }
  64.         elseif (isset($_COOKIE['user'])) {
  65.             $response Response::getInstance();
  66.             try {
  67.                 $user = unserialize($_COOKIE['user']);
  68.                 if (isset($user[0]$user[1]&& !$id $this->authenticate($user[0]$user[1]true)) {
  69.                     $response->deleteCookie('user'$this->getConfigValue('site.root'));
  70.                 }
  71.             }
  72.             catch (Exception $e){
  73.                 $response->deleteCookie('user'$this->getConfigValue('site.root'));
  74.             }
  75.         }
  76.         elseif (isset($_POST['user']['login']&& isset($_POST['user']['username']&& isset($_POST['user']['password'])) {
  77.             $id $this->authenticate(
  78.                 $_POST['user']['username'],
  79.                 sha1($_POST['user']['password']),
  80.                 (empty($_POST['user']['remember']false true)
  81.             );
  82.         }
  83.         $this->loadInfo($id);
  84.     }
  85.  
  86.     /**
  87.      * Возвращает флаг успеха аутентификации:
  88.      *     true - пользователь успешно аутентифицирован;
  89.      *     false - пользователь является гостем.
  90.      *
  91.      * @access public
  92.      * @return boolean 
  93.      */
  94.     public function isAuthenticated({
  95.         return ($this->getID(=== false)false true;
  96.     }
  97.  
  98.     /**
  99.      * Аутентифицирует пользователя по его имени и SHA-1 хэшу пароля.
  100.      * Если флаг $remember установлен в true, при успешной аутентификации
  101.      * клиенту устанавливаются cookie с информацией о его аккаунте на 30 дней,
  102.      * для автоматизации процедуры входа при последующих посещениях сайта.
  103.      * Возвращает флаг успеха аутентификации.
  104.      *
  105.      * @access public
  106.      * @param string $username имя пользовате
  107.      * @param string $password SHA-1 хэш пароля
  108.      * @param boolean $remember 
  109.      * @return mixed 
  110.      */
  111.     public function authenticate($username$password$remember false{
  112.         $username = trim($username);
  113.         $result $this->dbh->select(
  114.             'user_Users''u_id',
  115.             array(
  116.                 'u_name' => $username,
  117.                 'u_password' => $password,
  118.                 'u_is_active' => 1
  119.             )
  120.         );
  121.         if (!is_array($result)) {
  122.             return false;
  123.         }
  124.         $id simplifyDBResult($result'u_id'true);
  125.         if ($remember{
  126.             $response Response::getInstance();
  127.             $response->setCookie(
  128.                 'user',
  129.                 serialize(array($username$password)),
  130.                 time((3600 24 30),
  131.                 $this->getConfigValue('site.root')
  132.             );
  133.         }
  134.         $_SESSION['userID'$id;
  135.         return $id;
  136.     }
  137.  
  138.     /**
  139.      * Очищает всю информацию о пользователе из сессии, cookie.
  140.      *
  141.      * @access public
  142.      * @return boolean 
  143.      */
  144.     public function clearInfo({
  145.         if (isset($_SESSION['userID'])) {
  146.             unset($_SESSION['userID']);
  147.         }
  148.         if (isset($_COOKIE['user'])) {
  149.             $response Response::getInstance();
  150.             $response->deleteCookie('user'$this->getConfigValue('site.root'));
  151.         }
  152.     }
  153. }

Documentation generated on Mon, 17 Sep 2007 13:25:09 +0300 by phpDocumentor 1.4.0a2