protected function _auth($user) { $this->_id = $user->id; $this->username = $user->email; $this->setState('id', $user->id); $this->setState('role', $user->role); $this->setState('email', $user->email); $this->setState('loginTime', time()); // для админа в сессию запишем еще несколько значений if ($user->role == User::getSuperuserRole()) { $this->setState('loginAdmTime', time()); $this->setState('isAdmin', true); /* Получаем настройки по всем модулям для данного пользователя: */ $settings = Settings::model()->fetchUserModuleSettings($user->id); $sessionSettings = array(); /* Если передан не пустой массив, проходим по нему: */ if (!empty($settings) && is_array($settings)) { foreach ($settings as $sets) { /* Наполняем нашу сессию: */ if (!isset($sessionSettings[$sets->module_id])) { $sessionSettings[$sets->module_id] = array(); } $sessionSettings[$sets->module_id][$sets->param_name] = $sets->param_value; } } $this->setState('modSettings', $sessionSettings); } // зафиксируем время входа $user->last_visit = new CDbExpression('NOW()'); $user->visits_count++; $user->update(array('last_visit', 'visits_count')); }
/** * Метод аутентификации пользователя: * * @return bool is user authenticated **/ public function authenticate() { if (($user = User::model()->active()->findByAttributes(array('email' => $this->username))) === null) { $this->errorCode = self::ERROR_USERNAME_INVALID; } else { if (!Yii::app()->userManager->hasher->checkPassword($this->password, $user->hash)) { $this->errorCode = self::ERROR_PASSWORD_INVALID; } else { // запись данных в сессию пользователя $this->_id = $user->id; $this->username = $user->email; $this->setState('id', $user->id); $this->setState('role', $user->role); $this->setState('email', $user->email); $this->setState('loginTime', time()); // для админа в сессию запишем еще несколько значений if ($user->role == User::getSuperuserRole()) { $this->setState('loginAdmTime', time()); $this->setState('isAdmin', true); /* Получаем настройки по всем модулям для данного пользователя: */ $settings = Settings::model()->fetchUserModuleSettings($user->id); $sessionSettings = array(); /* Если передан не пустой массив, проходим по нему: */ if (!empty($settings) && is_array($settings)) { foreach ($settings as $sets) { /* Наполняем нашу сессию: */ if (!isset($sessionSettings[$sets->module_id])) { $sessionSettings[$sets->module_id] = array(); } $sessionSettings[$sets->module_id][$sets->param_name] = $sets->param_value; } } $this->setState('modSettings', $sessionSettings); } // зафиксируем время входа $user->last_visit = new CDbExpression('NOW()'); $user->update(array('last_visit')); $this->errorCode = self::ERROR_NONE; } } return $this->errorCode == self::ERROR_NONE; }
/** * Именнованные условия: * * @return array */ public function scopes() { return array('active' => array('condition' => $this->tableAlias . '.status = :user_status', 'params' => array(':user_status' => self::STATUS_ACTIVE)), 'blocked' => array('condition' => $this->tableAlias . '.status = :blocked_status', 'params' => array(':blocked_status' => self::STATUS_BLOCK)), 'admin' => array('condition' => $this->tableAlias . '.role = :role', 'params' => array(':role' => User::getSuperuserRole())), 'simpleUsers' => array('condition' => $this->tableAlias . '.role = :role', 'params' => array(':role' => self::getAuthenticatedRole()))); }