-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWebUser.php
More file actions
116 lines (99 loc) · 4.32 KB
/
WebUser.php
File metadata and controls
116 lines (99 loc) · 4.32 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
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
<?php
/**
* Created by WebSee.
* User: SergeyTigrov
* Date: 30.05.12
* Time: 11:42
*/
class WebUser extends CWebUser {
/**
* @var string is used instead of returnUrl
* В конфигурации (main.php) для значение по умолчанию вместо returnUrl,
* следует использовать параметр defaultReturnUrl,
* иначе при каждой инициализации объекта класса CWebUser стартует сессия.
*/
public $defaultReturnUrl;
/**
* Инициализация компонента.
* Session стартуются, только если ранее они уже были установлены.
*/
public function init() {
// Пропускаем инициализацию у родительского класа и делаем иницализацию у прородительского класса
$parent = get_parent_class(get_parent_class(__CLASS__));
$parent::init();
$session = Yii::app()->getSession();
if ($session->isUsed) {
$session->open();
}
if($this->getIsGuest() && $this->allowAutoLogin) {
$this->restoreFromCookie();
} else if($this->autoRenewCookie && $this->allowAutoLogin) {
$this->renewCookie();
}
if($session->getIsStarted() && $this->autoUpdateFlash) {
$this->updateFlash();
}
$this->updateAuthStatus();
}
public function getIsGuest() {
return Yii::app()->getSession()->getIsStarted()
? parent::getIsGuest()
: true;
}
public function getState($key,$defaultValue=null) {
return Yii::app()->getSession()->getIsStarted()
? parent::getState($key,$defaultValue)
: $defaultValue;
}
public function setState($key,$value,$defaultValue=null) {
Yii::app()->getSession()->open();
return parent::setState($key,$value,$defaultValue);
}
public function hasState($key) {
return Yii::app()->getSession()->getIsStarted()
? parent::hasState($key)
: false;
}
public function clearStates() {
return Yii::app()->getSession()->getIsStarted()
? parent::clearStates()
: null;
}
public function getFlashes($delete=true) {
return Yii::app()->getSession()->getIsStarted()
? parent::getFlashes($delete)
: array();
}
public function getFlash($key,$defaultValue=null,$delete=true) {
return Yii::app()->getSession()->getIsStarted()
? parent::getFlash($key,$defaultValue,$delete)
: $defaultValue;
}
public function setFlash($key,$value,$defaultValue=null) {
Yii::app()->getSession()->open();
return parent::setFlash($key,$value,$defaultValue);
}
public function hasFlash($key) {
return Yii::app()->getSession()->getIsStarted()
? parent::hasFlash($key)
: false;
}
public function getReturnUrl($defaultUrl=null) {
return Yii::app()->getSession()->getIsStarted()
? parent::getReturnUrl($this->defaultReturnUrl ?: $defaultUrl)
: $this->defaultReturnUrl ?: $defaultUrl;
}
public function setReturnUrl($value) {
// В конфигурации (main.php) для значение по умолчанию вместо returnUrl,
// следует использовать параметр defaultReturnUrl,
// иначе при каждой инициализации объекта класса CWebUser стартует сессия.
Yii::app()->getSession()->open();
return parent::setReturnUrl($value);
}
public function beforeLogin($id, $states, $fromCookie) {
// Открываем Session, если пользователь успешно прошёл идентификацию
// (Функция beforeLogin вызывается после успешной идентификации)
Yii::app()->getSession()->open();
return parent::beforeLogin($id, $states, $fromCookie);
}
}