UserIdentity.php
2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?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);
}
}
}