PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / trunk
Advanced Access Manager – Access Governance for WordPress vtrunk
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 / Restful / BackendMenu.php
advanced-access-manager / application / Restful Last commit date
AccessDeniedRedirect.php 1 year ago AdminToolbar.php 1 year ago ApiRoute.php 1 year ago BackendMenu.php 1 year ago BackwardCompatibility.php 1 year ago Capability.php 1 year ago Configs.php 5 months ago Content.php 1 year ago Identity.php 1 year ago Jwt.php 5 months ago LoginRedirect.php 1 year ago LogoutRedirect.php 1 year ago Metabox.php 1 year ago Mu.php 1 year ago NotFoundRedirect.php 1 year ago Policies.php 1 year ago Roles.php 1 year ago SecureLogin.php 1 year ago SecurityAudit.php 1 year ago ServiceTrait.php 1 year ago Settings.php 1 year ago Urls.php 1 year ago Users.php 1 year ago Widgets.php 1 year ago
BackendMenu.php
281 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 * RESTful API for the Backend Menu service
12 *
13 * @package AAM
14 * @version 7.0.0
15 */
16 class AAM_Restful_BackendMenu
17 {
18
19 use AAM_Restful_ServiceTrait;
20
21 /**
22 * Necessary permissions to access endpoint
23 *
24 * @version 7.0.0
25 */
26 const PERMISSIONS = [
27 'aam_manager',
28 'aam_manage_backend_menu'
29 ];
30
31 /**
32 * Constructor
33 *
34 * @return void
35 * @access protected
36 *
37 * @version 7.0.0
38 */
39 protected function __construct()
40 {
41 // Register API endpoint
42 add_action('rest_api_init', function() {
43 // Get the list of backend menus
44 $this->_register_route('/backend-menu', [
45 'methods' => WP_REST_Server::READABLE,
46 'callback' => [ $this, 'get_menu_items' ]
47 ], self::PERMISSIONS);
48
49 // Get a menu
50 $this->_register_route('/backend-menu/(?P<id>[A-Za-z0-9\/\+=]+)', [
51 'methods' => WP_REST_Server::READABLE,
52 'callback' => array($this, 'get_menu_item'),
53 'args' => array(
54 'id' => array(
55 'description' => 'Base64 encoded backend menu unique slug',
56 'type' => 'string',
57 'required' => true
58 )
59 )
60 ], self::PERMISSIONS);
61
62 // Update a menu's permission
63 $this->_register_route('/backend-menu/(?P<id>[A-Za-z0-9\/\+=]+)', [
64 'methods' => WP_REST_Server::EDITABLE,
65 'callback' => array($this, 'update_menu_item_permission'),
66 'args' => array(
67 'id' => array(
68 'description' => 'Base64 encoded backend menu unique slug',
69 'type' => 'string',
70 'required' => true
71 ),
72 'effect' => array(
73 'description' => 'Either menu is restricted or not',
74 'type' => 'string',
75 'default' => 'deny',
76 'enum' => [ 'allow', 'deny' ]
77 )
78 )
79 ], self::PERMISSIONS);
80
81 // Delete a menu's permission
82 $this->_register_route('/backend-menu/(?P<id>[A-Za-z0-9\/\+=]+)', [
83 'methods' => WP_REST_Server::DELETABLE,
84 'callback' => array($this, 'delete_menu_item_permission'),
85 'args' => array(
86 'id' => array(
87 'description' => 'Base64 encoded backend menu unique slug',
88 'type' => 'string',
89 'required' => true
90 )
91 )
92 ], self::PERMISSIONS);
93
94 // Reset all backend menu permissions
95 $this->_register_route('/backend-menu', array(
96 'methods' => WP_REST_Server::DELETABLE,
97 'callback' => array($this, 'reset_permissions')
98 ), self::PERMISSIONS);
99 });
100 }
101
102 /**
103 * Get the entire backend menu
104 *
105 * @param WP_REST_Request $request
106 *
107 * @return WP_REST_Response
108 * @access public
109 *
110 * @version 7.0.0
111 */
112 public function get_menu_items(WP_REST_Request $request)
113 {
114 try {
115 $service = $this->_get_service($request);
116 $result = [];
117
118 foreach($service->get_items() as $item) {
119 array_push($result, $this->_prepare_menu_item($item));
120 }
121 } catch (Exception $e) {
122 $result = $this->_prepare_error_response($e);
123 }
124
125 return rest_ensure_response($result);
126 }
127
128 /**
129 * Get backend menu item
130 *
131 * @param WP_REST_Request $request
132 *
133 * @return WP_REST_Response
134 * @access public
135 *
136 * @version 7.0.0
137 */
138 public function get_menu_item(WP_REST_Request $request)
139 {
140 try {
141 $service = $this->_get_service($request);
142 $result = $this->_prepare_menu_item($service->get_item(
143 base64_decode($request->get_param('id'))
144 ));
145 } catch (Exception $e) {
146 $result = $this->_prepare_error_response($e);
147 }
148
149 return rest_ensure_response($result);
150 }
151
152 /**
153 * Update backend menu item permissions
154 *
155 * @param WP_REST_Request $request
156 *
157 * @return WP_REST_Response
158 * @access public
159 *
160 * @version 7.0.0
161 */
162 public function update_menu_item_permission(WP_REST_Request $request)
163 {
164 try {
165 $service = $this->_get_service($request);
166
167 // Get all the necessary attributes
168 $slug = base64_decode($request->get_param('id'));
169 $effect = strtolower($request->get_param('effect'));
170
171 if ($effect === 'allow') {
172 $service->allow($slug);
173 } else {
174 $service->deny($slug);
175 }
176
177 // Prepare response
178 $result = $this->_prepare_menu_item($service->get_item($slug));
179 } catch (Exception $e) {
180 $result = $this->_prepare_error_response($e);
181 }
182
183 return rest_ensure_response($result);
184 }
185
186 /**
187 * Delete menu item permission
188 *
189 * @param WP_REST_Request $request
190 *
191 * @return WP_REST_Response
192 * @access public
193 *
194 * @version 7.0.0
195 */
196 public function delete_menu_item_permission(WP_REST_Request $request)
197 {
198 try {
199 $service = $this->_get_service($request);
200
201 // Reset the menu item permissions
202 $service->reset(base64_decode($request->get_param('id')));
203
204 // Prepare response
205 $result = [ 'success' => true ];
206 } catch (Exception $e) {
207 $result = $this->_prepare_error_response($e);
208 }
209
210 return rest_ensure_response($result);
211 }
212
213 /**
214 * Reset all backend menu permissions
215 *
216 * @param WP_REST_Request $request
217 *
218 * @return WP_REST_Response
219 * @access public
220 *
221 * @version 7.0.0
222 */
223 public function reset_permissions(WP_REST_Request $request)
224 {
225 try {
226 $service = $this->_get_service($request);
227
228 // Reset all permissions
229 $result = [ 'success' => $service->reset() ];
230 } catch (Exception $e) {
231 $result = $this->_prepare_error_response($e);
232 }
233
234 return rest_ensure_response($result);
235 }
236
237 /**
238 * Prepare menu item
239 *
240 * @param array $menu
241 *
242 * @return array
243 * @access private
244 *
245 * @version 7.0.0
246 */
247 private function _prepare_menu_item($menu)
248 {
249 // Adding ID so we can effectively communicate through RESTful API
250 $result = array_merge([
251 'id' => base64_encode($menu['slug']),
252 ], $menu);
253
254 if (!empty($result['children'])) {
255 foreach($result['children'] as $i => $child) {
256 $result['children'][$i] = $this->_prepare_menu_item($child);
257 }
258 }
259
260 return $result;
261 }
262
263 /**
264 * Get JWT framework service
265 *
266 * @param WP_REST_Request $request
267 *
268 * @return AAM_Framework_Service_BackendMenu
269 * @access private
270 *
271 * @version 7.0.0
272 */
273 private function _get_service($request)
274 {
275 return AAM::api()->backend_menu(
276 $this->_determine_access_level($request),
277 [ 'error_handling' => 'exception' ]
278 );
279 }
280
281 }