PluginProbe
User Access Manager / 2.1.1
User Access Manager v2.1.1
2.3.20 2.3.19 2.3.18 2.3.17 2.3.16 2.3.15 2.3.14 2.3.13 trunk 0.6 0.6.1 0.6.2 0.7 0.7 Beta 0.7.0.1 0.8 0.8.0.1 0.8.0.2 0.9 0.9.1 0.9.1.1 0.9.1.2 0.9.1.3 0.9.1.4 1.0 All 136 releases
user-access-manager / src / User / UserHandler.php

UserHandler.php in User Access Manager 2.1.1, at src/User/UserHandler.php

211 lines 5.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * UserHandler.php
4 *
5 * The UserHandler class file.
6 *
7 * PHP versions 5
8 *
9 * @author Alexander Schneider <alexanderschneider85@gmail.com>
10 * @copyright 2008-2017 Alexander Schneider
11 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2
12 * @version SVN: $id$
13 * @link http://wordpress.org/extend/plugins/user-access-manager/
14 */
15 namespace UserAccessManager\User;
16
17 use UserAccessManager\Config\MainConfig;
18 use UserAccessManager\Database\Database;
19 use UserAccessManager\Object\ObjectHandler;
20 use UserAccessManager\UserGroup\UserGroup;
21 use UserAccessManager\Wrapper\Wordpress;
22
23 /**
24 * Class UserHandler
25 *
26 * @package UserAccessManager\UserHandler
27 */
28 class UserHandler
29 {
30 const MANAGE_USER_GROUPS_CAPABILITY = 'manage_user_groups';
31
32 /**
33 * @var Wordpress
34 */
35 private $wordpress;
36
37 /**
38 * @var MainConfig
39 */
40 private $config;
41
42 /**
43 * @var Database
44 */
45 private $database;
46
47 /**
48 * @var ObjectHandler
49 */
50 private $objectHandler;
51
52 /**
53 * The constructor
54 *
55 * @param Wordpress $wordpress
56 * @param MainConfig $config
57 * @param Database $database
58 * @param ObjectHandler $objectHandler
59 */
60 public function __construct(
61 Wordpress $wordpress,
62 MainConfig $config,
63 Database $database,
64 ObjectHandler $objectHandler
65 ) {
66 $this->wordpress = $wordpress;
67 $this->config = $config;
68 $this->database = $database;
69 $this->objectHandler = $objectHandler;
70 }
71
72 /**
73 * Converts the ip to an integer.
74 *
75 * @param string $ip
76 *
77 * @return string|false
78 */
79 private function calculateIp($ip)
80 {
81 if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) {
82 return base_convert(ip2long($ip), 10, 2);
83 } elseif (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
84 return false;
85 }
86
87 $packedIp = inet_pton($ip);
88 $bits = 15; // 16 x 8 bit = 128bit (ipv6)
89 $binaryIp = '';
90
91 while ($bits >= 0) {
92 $binaryIp = sprintf('%08b', (ord($packedIp[$bits]))).$binaryIp;
93 $bits--;
94 }
95
96 return $binaryIp;
97 }
98
99 /**
100 * Calculates the ip range.
101 *
102 * @param string $ipRange
103 *
104 * @return array
105 */
106 private function getCalculatedRange($ipRange)
107 {
108 $ipRange = explode('-', $ipRange);
109 $rangeBegin = $ipRange[0];
110 $rangeEnd = isset($ipRange[1]) ? $ipRange[1] : $ipRange[0];
111
112 return [
113 $this->calculateIp($rangeBegin),
114 $this->calculateIp($rangeEnd)
115 ];
116 }
117
118 /**
119 * Checks if the given ip matches with the range.
120 *
121 * @param string $currentIp The ip of the current user.
122 * @param array $ipRanges The ip ranges.
123 *
124 * @return bool
125 */
126 public function isIpInRange($currentIp, array $ipRanges)
127 {
128 $currentIp = $this->calculateIp($currentIp);
129
130 if ($currentIp !== false) {
131 foreach ($ipRanges as $ipRange) {
132 $calculatedIpRange = $this->getCalculatedRange($ipRange);
133
134 if ($calculatedIpRange[0] !== false && $calculatedIpRange[1] !== false
135 && $calculatedIpRange[0] <= $currentIp && $currentIp <= $calculatedIpRange[1]
136 ) {
137 return true;
138 }
139 }
140 }
141
142 return false;
143 }
144
145 /**
146 * Return the role of the user.
147 *
148 * @param \WP_User|false $user The user.
149 *
150 * @return array
151 */
152 public function getUserRole($user)
153 {
154 if ($user instanceof \WP_User && isset($user->{$this->database->getPrefix().'capabilities'}) === true) {
155 $capabilities = (array)$user->{$this->database->getPrefix().'capabilities'};
156 } else {
157 $capabilities = [];
158 }
159
160 return (count($capabilities) > 0) ? array_keys($capabilities) : [UserGroup::NONE_ROLE];
161 }
162
163 /**
164 * Checks the user access by user level.
165 *
166 * @param bool|string $allowedCapability If set check also for the capability.
167 *
168 * @return bool
169 */
170 public function checkUserAccess($allowedCapability = false)
171 {
172 $currentUser = $this->wordpress->getCurrentUser();
173
174 if ($this->wordpress->isSuperAdmin($currentUser->ID) === true
175 || $allowedCapability !== false && $currentUser->has_cap($allowedCapability) === true
176 ) {
177 return true;
178 }
179
180 $roles = $this->getUserRole($currentUser);
181 $rolesMap = array_flip($roles);
182
183 $orderedRoles = [UserGroup::NONE_ROLE, 'subscriber', 'contributor', 'author', 'editor', 'administrator'];
184 $orderedRolesMap = array_flip($orderedRoles);
185
186 $userRoles = array_intersect_key($orderedRolesMap, $rolesMap);
187 $rightsLevel = (count($userRoles) > 0) ? end($userRoles) : -1;
188 $fullAccessRole = $this->config->getFullAccessRole();
189
190 return (isset($orderedRolesMap[$fullAccessRole]) === true && $rightsLevel >= $orderedRolesMap[$fullAccessRole]
191 || isset($rolesMap['administrator']) === true
192 );
193 }
194
195 /**
196 * Checks if the user is an admin user
197 *
198 * @param integer $userId The user id.
199 *
200 * @return bool
201 */
202 public function userIsAdmin($userId)
203 {
204 $user = $this->objectHandler->getUser($userId);
205 $roles = $this->getUserRole($user);
206 $rolesMap = array_flip($roles);
207
208 return (isset($rolesMap['administrator']) === true || $this->wordpress->isSuperAdmin($userId) === true);
209 }
210 }
211