PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.8.2
Advanced Access Manager – Access Governance for WordPress v5.8.2
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / Application / Core / Gateway.php
advanced-access-manager / Application / Core Last commit date
Api 7 years ago ConfigPress 7 years ago Object 7 years ago Policy 7 years ago Subject 7 years ago API.php 7 years ago Cache.php 7 years ago Compatibility.php 7 years ago Config.php 7 years ago ConfigPress.php 7 years ago Console.php 7 years ago Exporter.php 7 years ago Gateway.php 7 years ago Importer.php 7 years ago JwtAuth.php 7 years ago Login.php 7 years ago Media.php 7 years ago Object.php 7 years ago Request.php 7 years ago Server.php 7 years ago Subject.php 7 years ago
Gateway.php
269 lines
1 <?php
2
3 /**
4 * ======================================================================
5 * LICENSE: This file is subject to the terms and conditions defined in *
6 * file 'license.txt', which is part of this source code package. *
7 * ======================================================================
8 */
9
10 /**
11 * AAM core API gateway
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 final class AAM_Core_Gateway {
17
18 /**
19 * Single instance of itself
20 *
21 * @var AAM_Core_Gateway
22 *
23 * @access protected
24 */
25 protected static $instance = null;
26
27 /**
28 * Constructor
29 */
30 protected function __construct() {}
31
32 /**
33 * Get AAM configuration option
34 *
35 * @param string $option
36 * @param mixed $default
37 *
38 * @return mixed
39 *
40 * @access public
41 */
42 public function getConfig($option, $default = null) {
43 return AAM_Core_Config::get($option, $default);
44 }
45
46 /**
47 * Get user
48 *
49 * If no $id specified, current user will be returned
50 *
51 * @param int $id Optional user id
52 *
53 * @return AAM_Core_Subject
54 *
55 * @access public
56 */
57 public function getUser($id = null) {
58 if (!empty($id)) {
59 $user = new AAM_Core_Subject_User($id);
60 } elseif (get_current_user_id()) {
61 $user = AAM::getUser();
62 } else {
63 $user = new AAM_Core_Subject_Visitor();
64 }
65
66 return $user;
67 }
68
69 /**
70 * Log any critical message
71 *
72 * @param string $message
73 * @param string $markers...
74 *
75 * @access public
76 */
77 public function log() {
78 call_user_func_array('AAM_Core_Console::add', func_get_args());
79 }
80
81 /**
82 * Deny access for current HTTP request
83 *
84 * @param mixed $params
85 *
86 * @return void
87 *
88 * @access public
89 */
90 public function denyAccess($params = null) {
91 AAM_Core_API::reject(AAM_Core_Api_Area::get(), $params);
92 }
93
94 /**
95 * Check if current user has access to specified resource
96 *
97 * Apply all access/security policies and identify if user has access to specified
98 * resource.
99 *
100 * @param string $resource
101 * @param string $action
102 *
103 * @return mixed Boolean true|false if explicit access is defined or null if no
104 * exact match found
105 */
106 public function isAllowed($resource, $action = null) {
107 $policy = AAM::api()->getUser()->getObject('policy');
108
109 return $policy->isAllowed($resource, $action);
110 }
111
112 /**
113 * Check if feature is enabled
114 *
115 * @param string $feature
116 * @param string $plugin
117 *
118 * @return boolean|null
119 *
120 * @access public
121 * @since v5.7.3
122 */
123 public function isEnabled($feature, $plugin = 'advanced-access-manager') {
124 $policy = AAM::api()->getUser()->getObject('policy');
125
126 return $policy->isEnabled($feature, $plugin);
127 }
128
129 /**
130 * Get policy manager
131 *
132 * @return AAM_Core_Policy_Manager
133 *
134 * @access public
135 */
136 public function getPolicyManager() {
137 return AAM_Core_Policy_Manager::getInstance();
138 }
139
140 /**
141 * Redirect request
142 *
143 * @param string $type
144 * @param mixed $arg
145 *
146 * @return void
147 *
148 * @access public
149 */
150 public function redirect($type, $arg = null) {
151 $area = AAM_Core_Api_Area::get();
152
153 switch($type) {
154 case 'login':
155 wp_redirect(add_query_arg(
156 array('reason' => 'restricted'),
157 wp_login_url(AAM_Core_Request::server('REQUEST_URI'))
158 ), 307);
159 break;
160
161 case 'page':
162 $page = AAM_Core_API::getCurrentPost();
163 if(empty($page) || ($page->ID !== intval($arg))) {
164 wp_safe_redirect(get_page_link($arg), 307);
165 }
166 break;
167
168 case 'message':
169 wp_die($arg);
170 break;
171
172 case 'url':
173 if (stripos($arg, AAM_Core_Request::server('REQUEST_URI')) === false) {
174 wp_redirect($arg, 307);
175 }
176 break;
177
178 case 'callback':
179 if (is_callable($arg)) {
180 call_user_func($arg);
181 }
182 break;
183
184 default:
185 wp_die(AAM_Core_Config::get(
186 "{$area}.access.deny.redirectRule", __('Access Denied', AAM_KEY)
187 ));
188 break;
189 }
190
191 exit; // Halt the execution
192 }
193
194 /**
195 * Check if capability exists
196 *
197 * This method checks if provided capability exists (registered for any role).
198 *
199 * @param string $capability
200 *
201 * @return boolean
202 *
203 * @access public
204 */
205 public function capabilityExists($capability) {
206 return AAM_Core_API::capabilityExists($capability);
207 }
208
209 /**
210 * Merge AAM settings
211 *
212 * @param array $set1
213 * @param array $set2
214 * @param string $objectType
215 *
216 * @return array
217 *
218 * @access public
219 */
220 public function mergeSettings($set1, $set2, $objectType, $preference = null) {
221 $combined = array($set1, $set2);
222 $merged = array();
223
224 if (is_null($preference)) {
225 $preference = $this->getConfig(
226 "core.settings.{$objectType}.merge.preference", 'deny'
227 );
228 }
229
230 // first get the complete list of unique keys
231 $keys = array_keys(call_user_func_array('array_merge', $combined));
232
233 foreach($keys as $key) {
234 foreach($combined as $options) {
235 // If merging preference is "deny" and at least one of the access
236 // settings is checked, then final merged array will have it set
237 // to checked
238 if (in_array($preference, array('deny', 'apply'), true) && !empty($options[$key])) {
239 $merged[$key] = $options[$key];
240 break;
241 } elseif (in_array($preference, array('allow', 'deprive'), true) && empty($options[$key])) {
242 $merged[$key] = 0;
243 break;
244 } elseif (isset($options[$key])) {
245 $merged[$key] = $options[$key];
246 }
247 }
248 }
249
250 return $merged;
251 }
252
253 /**
254 * Get instance of the API gateway
255 *
256 * @return AAM_Core_Gateway
257 *
258 * @access public
259 * @static
260 */
261 public static function getInstance() {
262 if (is_null(self::$instance)) {
263 self::$instance = new self();
264 }
265
266 return self::$instance;
267 }
268
269 }