forked from samdark/yiiframework_ru_cookbook
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaccess.useridentity.model.txt
135 lines (110 loc) · 3.78 KB
/
access.useridentity.model.txt
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
Используем модель как UserIdentity
==================================
В разделе «[аутентификация](http://yiiframework.ru/doc/blog/ru/prototype.auth)»
руководства по созданию блога на Yii описывается использование интерфейса
[[IUserIdentity]] и реализующего его класса [[CUserIdentity]]. В данном рецепте
мы рассмотрим немного отличающийся от предствленного в руководстве подход. На наш
взгляд он является более удобным.
Основная идея — совместить модель пользователя (обычно это Active Record с именем
`User`) с `UserIdentity`. Поскольку в [[CUserIdentity]] нет никакого сложного
функционала, отказаться от него просто. Вместо этого будем использовать интерфейс:
~~~
[php]
class User extends CActiveRecord implements IUserIdentity
{
private $_id;
private $_name;
private $_isAuthenticated=false;
private $_state=array();
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'user';
}
public function rules()
{
return array(
array('email','required','on'=>'login,insert'),
array('password','required','on'=>'login'),
array('email','email'),
);
}
public function attributeLabels()
{
return array(
'email'=>'ааЛаЕаКббаОаНаНаАб аПаОббаА',
'password'=>'ааАбаОаЛб',
);
}
public function authenticate()
{
$model=self::model()->findByAttributes(array('email'=>$this->email));
if($model===null || $model->password!==sha1($this->password))
{
$this->addError('password','ааОаЛбаЗаОаВаАбаЕаЛб б баАаКаОаЙ баЛаЕаКббаОаНаНаОаЙ аПаОббаОаЙ аНаЕ аНаАаЙаДаЕаН аИаЛаИ аНаЕ аВаЕбаНбаЙ аПаАбаОаЛб.');
return false;
}
if(!$model->is_confirmed)
{
$this->addError('email','ааЕбаЕаД аВб
аОаДаОаМ аНаЕаОаБб
аОаДаИаМаО аПаОаДбаВаЕбаДаИбб аАаДбаЕб баЛаЕаКббаОаНаНаОаЙ аПаОббб.');
return false;
}
$this->_id=$model->id;
$this->_name=$model->email;
$this->_isAuthenticated=true;
$this->setState('locality_id',$model->locality_id);
return true;
}
protected function beforeSave()
{
if(!parent::beforeSave())
return false;
$this->code=$this->isNewRecord ? uniqid() : null;
return true;
}
protected function afterSave()
{
$this->_id=$this->id;
$this->_name=$this->email;
$this->_isAuthenticated=true;
}
public function getId()
{
return $this->_id;
}
public function getName()
{
return $this->_name;
}
public function getPersistentStates()
{
return $this->_state;
}
public function setPersistentStates($states)
{
$this->_state=$states;
}
public function getIsAuthenticated()
{
return $this->_isAuthenticated;
}
public function getState($name,$defaultValue=null)
{
return isset($this->_state[$name]) ? $this->_state[$name] : $defaultValue;
}
public function setState($name,$value)
{
$this->_state[$name]=$value;
}
public function clearState($name)
{
unset($this->_state[$name]);
}
}
~~~
---
- `Авторы`: [creocoder](http://yiiframework.ru/forum/memberlist.php?mode=viewprofile&u=722), Sam Dark ([rmcreative.ru](http://rmcreative.ru/))
- `Обсуждение и комментарии`: [http://yiiframework.ru/forum/](http://yiiframework.ru/forum/)