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 / Audit / EmptyUnusedRoleCheck.php
advanced-access-manager / application / Audit Last commit date
AuditCheckTrait.php 1 year ago CoreUserRoleOptionIntegrityCheck.php 1 year ago EditableFileSystemCheck.php 7 months ago ElevatedCoreRoleCheck.php 7 months ago EmptyUnusedRoleCheck.php 7 months ago HighPrivilegeContentModeratorCheck.php 7 months ago HighPrivilegeOrElevatedUserCheck.php 7 months ago HighPrivilegeRoleCheck.php 7 months ago HighPrivilegeUserCountCheck.php 7 months ago RestfulAutoDiscoverEndpointCheck.php 7 months ago RoleCapabilityNamingConventionCheck.php 7 months ago RoleIntegrityCheck.php 7 months ago RoleTransparencyCheck.php 7 months ago XmlRpcEndpointCheck.php 7 months ago
EmptyUnusedRoleCheck.php
180 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 * Detect empty roles
12 *
13 * @package AAM
14 * @version 7.0.0
15 */
16 class AAM_Audit_EmptyUnusedRoleCheck
17 {
18
19 use AAM_Audit_AuditCheckTrait;
20
21 /**
22 * Step ID
23 *
24 * @version 7.0.0
25 */
26 const ID = 'empty_unused_roles_detection';
27
28 /**
29 * List of WordPress core roles
30 *
31 * @return array
32 *
33 * @version 7.0.0
34 */
35 const CORE_ROLES = [
36 'administrator',
37 'editor',
38 'author',
39 'contributor',
40 'subscriber'
41 ];
42
43 /**
44 * Run the check
45 *
46 * @return array
47 *
48 * @access public
49 * @static
50 *
51 * @version 7.0.0
52 */
53 public static function run()
54 {
55 $issues = [];
56 $response = [ 'is_completed' => true ];
57
58 try {
59 array_push(
60 $issues,
61 ...self::_detect_empty_roles(self::_read_role_key_option())
62 );
63
64 array_push(
65 $issues,
66 ...self::_detect_unused_roles(self::_read_role_key_option())
67 );
68 } catch (Exception $e) {
69 array_push($issues, self::_format_issue(
70 'APPLICATION_ERROR',
71 [
72 'message' => $e->getMessage()
73 ],
74 'error'
75 ));
76 }
77
78 if (count($issues) > 0) {
79 $response['issues'] = $issues;
80 }
81
82 // Determine final status for the check
83 self::_determine_check_status($response);
84
85 return $response;
86 }
87
88 /**
89 * Get a collection of error messages for current step
90 *
91 * @return array
92 * @access private
93 * @static
94 *
95 * @version 7.0.0
96 */
97 private static function _get_message_templates()
98 {
99 return [
100 'EMPTY_ROLE' => __(
101 'Detected role %s (%s) with no capabilities',
102 'advanced-access-manager'
103 ),
104 'UNUSED_CUSTOM_ROLE' => __(
105 'Detected unused custom role %s (%s)',
106 'advanced-access-manager'
107 )
108 ];
109 }
110
111 /**
112 * Detect empty roles
113 *
114 * @param array $db_roles
115 *
116 * @return array
117 *
118 * @access private
119 * @static
120 *
121 * @version 7.0.0
122 */
123 private static function _detect_empty_roles($db_roles)
124 {
125 $response = [];
126
127 foreach($db_roles as $role_id => $role) {
128 if (empty($role['capabilities'])) {
129 array_push($response, self::_format_issue(
130 'EMPTY_ROLE',
131 [
132 'name' => translate_user_role(
133 !empty($role['name']) ? $role['name'] : $role_id
134 ),
135 'slug' => $role_id
136 ]
137 ));
138 }
139 }
140
141 return $response;
142 }
143
144 /**
145 * Detect unused roles
146 *
147 * @param array $db_roles
148 *
149 * @return array
150 *
151 * @access private
152 * @static
153 *
154 * @version 7.0.0
155 */
156 private static function _detect_unused_roles($db_roles)
157 {
158 $response = [];
159 $stats = count_users();
160
161 foreach($db_roles as $role_id => $role) {
162 if (empty($stats['avail_roles'][$role_id])
163 && !in_array($role_id, self::CORE_ROLES, true)
164 ) {
165 array_push($response, self::_format_issue(
166 'UNUSED_CUSTOM_ROLE',
167 [
168 'name' => translate_user_role(
169 !empty($role['name']) ? $role['name'] : $role_id
170 ),
171 'slug' => $role_id
172 ]
173 ));
174 }
175 }
176
177 return $response;
178 }
179
180 }