|
1
|
|
|
<?php /** MicroUser */ |
|
2
|
|
|
|
|
3
|
|
|
namespace Micro\Web; |
|
4
|
|
|
|
|
5
|
|
|
use Micro\Auth\Injector as AuthInjector; |
|
6
|
|
|
use Micro\Base\Exception; |
|
7
|
|
|
|
|
8
|
|
|
|
|
9
|
|
|
/** |
|
10
|
|
|
* Micro user class file |
|
11
|
|
|
* |
|
12
|
|
|
* @author Oleg Lunegov <[email protected]> |
|
13
|
|
|
* @link https://github.com/linpax/microphp-framework |
|
14
|
|
|
* @copyright Copyright (c) 2013 Oleg Lunegov |
|
15
|
|
|
* @license https://github.com/linpax/microphp-framework/blob/master/LICENSE |
|
16
|
|
|
* @package Micro |
|
17
|
|
|
* @subpackage Web |
|
18
|
|
|
* @version 1.0 |
|
19
|
|
|
* @since 1.0 |
|
20
|
|
|
*/ |
|
21
|
|
|
class User implements IUser |
|
22
|
|
|
{ |
|
23
|
|
|
protected $session; |
|
24
|
|
|
|
|
25
|
|
|
/** |
|
26
|
|
|
* @access public |
|
27
|
|
|
* @param ISession $session |
|
28
|
|
|
* @result void |
|
29
|
|
|
*/ |
|
30
|
|
|
public function __construct(ISession $session) |
|
31
|
|
|
{ |
|
32
|
|
|
$this->session = $session; |
|
33
|
|
|
} |
|
34
|
|
|
|
|
35
|
|
|
/** |
|
36
|
|
|
* @param string $permission |
|
37
|
|
|
* @param array $data |
|
38
|
|
|
* @return bool |
|
39
|
|
|
* @throws Exception |
|
40
|
|
|
*/ |
|
41
|
|
|
public function check($permission, array $data = []) |
|
42
|
|
|
{ |
|
43
|
|
|
if (!$this->isGuest()) { |
|
44
|
|
|
return (new AuthInjector)->build()->check($this->getID(), $permission, $data); |
|
|
|
|
|
|
45
|
|
|
} else { |
|
46
|
|
|
return false; |
|
47
|
|
|
} |
|
48
|
|
|
} |
|
49
|
|
|
|
|
50
|
|
|
/** |
|
51
|
|
|
* @return bool |
|
52
|
|
|
* @throws Exception |
|
53
|
|
|
*/ |
|
54
|
|
|
public function isGuest() |
|
55
|
|
|
{ |
|
56
|
|
|
return !$this->session->UserID; |
|
|
|
|
|
|
57
|
|
|
} |
|
58
|
|
|
|
|
59
|
|
|
/** |
|
60
|
|
|
* @return bool|int |
|
61
|
|
|
* @throws Exception |
|
62
|
|
|
*/ |
|
63
|
|
|
public function getID() |
|
64
|
|
|
{ |
|
65
|
|
|
return (!$this->isGuest()) ? $this->session->UserID : false; |
|
|
|
|
|
|
66
|
|
|
} |
|
67
|
|
|
|
|
68
|
|
|
/** |
|
69
|
|
|
* @param int|string $userId |
|
70
|
|
|
* @throws Exception |
|
71
|
|
|
*/ |
|
72
|
|
|
public function login($userId) |
|
73
|
|
|
{ |
|
74
|
|
|
$this->setID($userId); |
|
75
|
|
|
} |
|
76
|
|
|
|
|
77
|
|
|
/** |
|
78
|
|
|
* @param mixed $id |
|
79
|
|
|
* @throws Exception |
|
80
|
|
|
*/ |
|
81
|
|
|
public function setID($id) |
|
82
|
|
|
{ |
|
83
|
|
|
$this->session->UserID = $id; |
|
|
|
|
|
|
84
|
|
|
} |
|
85
|
|
|
|
|
86
|
|
|
/** |
|
87
|
|
|
* @throws Exception |
|
88
|
|
|
*/ |
|
89
|
|
|
public function logout() |
|
90
|
|
|
{ |
|
91
|
|
|
if (!$this->isGuest()) { |
|
92
|
|
|
$this->setID(null); |
|
93
|
|
|
$this->session->destroy(); |
|
94
|
|
|
} |
|
95
|
|
|
} |
|
96
|
|
|
|
|
97
|
|
|
/** |
|
98
|
|
|
* @return string |
|
99
|
|
|
* @throws Exception |
|
100
|
|
|
*/ |
|
101
|
|
|
public function getCaptcha() |
|
102
|
|
|
{ |
|
103
|
|
|
return $this->session->captchaCode; |
|
|
|
|
|
|
104
|
|
|
} |
|
105
|
|
|
|
|
106
|
|
|
/** |
|
107
|
|
|
* @param string $code |
|
108
|
|
|
* @throws Exception |
|
109
|
|
|
*/ |
|
110
|
|
|
public function setCaptcha($code) |
|
111
|
|
|
{ |
|
112
|
|
|
$this->session->captchaCode = md5($code); |
|
|
|
|
|
|
113
|
|
|
} |
|
114
|
|
|
|
|
115
|
|
|
/** |
|
116
|
|
|
* @param string $code |
|
117
|
|
|
* @return bool|null |
|
118
|
|
|
* @throws Exception |
|
119
|
|
|
*/ |
|
120
|
|
|
public function checkCaptcha($code) |
|
121
|
|
|
{ |
|
122
|
|
|
if (!$this->session->captchaCode) { |
|
|
|
|
|
|
123
|
|
|
return null; |
|
124
|
|
|
} |
|
125
|
|
|
|
|
126
|
|
|
return $this->session->captchaCode === md5($code); |
|
|
|
|
|
|
127
|
|
|
} |
|
128
|
|
|
} |
|
129
|
|
|
|
This check looks at variables that are passed out again to other methods.
If the outgoing method call has stricter type requirements than the method itself, an issue is raised.
An additional type check may prevent trouble.