PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.9
Advanced Access Manager – Access Governance for WordPress v5.9
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 / Backend / Subject.php
advanced-access-manager / Application / Backend Last commit date
Feature 7 years ago View 7 years ago Widget 7 years ago phtml 7 years ago Authorization.php 7 years ago Feature.php 7 years ago Filter.php 7 years ago Manager.php 7 years ago Subject.php 7 years ago View.php 7 years ago
Subject.php
192 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 * Backend subject
12 *
13 * Currently managed subject. Based on the HTTP request critiria, define what subject
14 * is currently managed with AAM UI.
15 *
16 * @package AAM
17 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
18 */
19 class AAM_Backend_Subject {
20
21 /**
22 * Single instance of itself
23 *
24 * @var AAM_Backend_Subject
25 *
26 * @access protected
27 * @static
28 */
29 protected static $instance = null;
30
31 /**
32 * Subject information
33 *
34 * @var AAM_Core_Subject
35 *
36 * @access protected
37 */
38 protected $subject = null;
39
40 /**
41 * Constructor
42 *
43 * @return void
44 *
45 * @access protected
46 */
47 protected function __construct() {
48 $subject = AAM_Core_Request::request('subject');
49
50 if ($subject) {
51 $instance = $this->initRequestedSubject(
52 $subject, AAM_Core_Request::request('subjectId')
53 );
54
55 $max = AAM::getUser()->getMaxLevel();
56
57 if ($max < AAM_Core_API::maxLevel($instance->getMaxLevel())) {
58 AAM::api()->denyAccess(array('reason' => 'User Level is too low'));
59 }
60 } else {
61 $this->initDefaultSubject();
62 }
63 }
64
65 /**
66 * Initialize requested subject
67 *
68 * @param string $type
69 * @param string $id
70 *
71 * @return void
72 *
73 * @access protected
74 */
75 protected function initRequestedSubject($type, $id) {
76 $classname = 'AAM_Core_Subject_' . ucfirst($type);
77
78 if (class_exists($classname)) {
79 $subject = new $classname(stripslashes($id));
80 $subject->initialize();
81
82 $this->setSubject($subject);
83 } else {
84 wp_die('Invalid subject type'); exit;
85 }
86
87 return $subject;
88 }
89
90 /**
91 * Initialize default subject
92 *
93 * Based on user permissions, pick the first available subject that current user
94 * can manage with AAM UI
95 *
96 * @return void
97 *
98 * @access protected
99 */
100 protected function initDefaultSubject() {
101 // This cover the scenario when we directly go to user e.g. ?page=aam&user=38
102 $forceUser = AAM_Core_Request::get('user');
103
104 // TODO: The aam_list_roles is legacy and can be removed in Oct 2021
105 if (!$forceUser && (current_user_can('aam_manage_roles') || current_user_can('aam_list_roles'))) {
106 $roles = array_keys(get_editable_roles());
107 $this->initRequestedSubject(AAM_Core_Subject_Role::UID, array_shift($roles));
108 // TODO: The list_users is legacy and can be removed in Oct 2021
109 } elseif (current_user_can('aam_manage_users') || current_user_can('list_users')) {
110 $this->initRequestedSubject(
111 AAM_Core_Subject_User::UID,
112 ($forceUser ? intval($forceUser) : get_current_user_id())
113 );
114 // TODO: The aam_list_roles is legacy and can be removed in Oct 2021
115 } elseif (current_user_can('aam_manage_visitors')) {
116 $this->initRequestedSubject(AAM_Core_Subject_Visitor::UID, null);
117 } elseif (current_user_can('aam_manage_default')) {
118 $this->initRequestedSubject(AAM_Core_Subject_Default::UID, null);
119 }
120 }
121
122 /**
123 * Set subject
124 *
125 * @param AAM_Core_Subject $subject
126 *
127 * @access protected
128 */
129 protected function setSubject(AAM_Core_Subject $subject) {
130 $this->subject = $subject;
131 }
132
133 /**
134 * Get subject property
135 *
136 * @return mixed
137 *
138 * @access public
139 */
140 public function __get($name) {
141 return (!empty($this->subject->$name) ? $this->subject->$name : null);
142 }
143
144 /**
145 * Call subject's method
146 *
147 * @param string $name
148 * @param array $args
149 *
150 * @return mixed
151 *
152 * @access public
153 */
154 public function __call($name, $args) {
155 //make sure that method is callable
156 if (method_exists($this->subject, $name)) {
157 $response = call_user_func_array(array($this->subject, $name), $args);
158 } else {
159 $response = null;
160 }
161
162 return $response;
163 }
164
165 /**
166 * Get AAM subject
167 *
168 * @return AAM_Core_Subject
169 *
170 * @access public
171 */
172 public function get() {
173 return $this->subject;
174 }
175
176 /**
177 * Get single instance of the subject
178 *
179 * @return AAM_Backend_Subject
180 *
181 * @access public
182 * @static
183 */
184 public static function getInstance() {
185 if (is_null(self::$instance)) {
186 self::$instance = new self;
187 }
188
189 return self::$instance;
190 }
191
192 }