energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file AuthUser.class.php

Documentation is available at AuthUser.class.php

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