<?php /** * UserIdentity represents the data needed to identity a user. * It contains the authentication method that checks if the provided * data can identity the user. */ class UserIdentity extends CUserIdentity { /** * Authenticated person ID * @var string */ private $_id; /** * Authenticates a user. * The example implementation makes sure if the username and password * are both 'demo'. * In practical applications, this should be changed to authenticate * against some persistent user identity storage (e.g. database). * @return boolean whether authentication succeeds. */ public function authenticate() { if(empty($this->username)) { $this->errorCode=self::ERROR_USERNAME_INVALID; return !$this->errorCode; } $manager = Manager::model()->with('access')->find(array( "select" => array("id", "name", "login"), "condition" => implode(" AND ", array( "manager = :manager", "login = :login", "access.domain = :transport", "passwd = :pass" )), "params" => array( ":manager" => 1, ":login" => $this->getPartOfName($this->username, 'name'), ":transport" => $this->getPartOfName($this->username, 'domain'), ":pass" => $this->password ) )); if($manager===null) { $this->errorCode=self::ERROR_PASSWORD_INVALID; } else { $this->_id = $manager->id; // Write manager short info $this->setState('__fullname', empty($manager->name) ? $manager->login : $manager->name); $this->errorCode=self::ERROR_NONE; } return !$this->errorCode; } public function getId() { return $this->_id; } /** * Returns part of email name */ private function getPartOfName( $param = "", $name = "name") { $param = trim($param); $param = explode("@", $param); if(count($param) > 2) { $param = array_slice($param, 0, 2); } switch($name) { case 'name': return $param[0]; case 'domain': return $param[1]; default: return implode("@", $params); } } }