PluginProbe ʕ •ᴥ•ʔ
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More / 4.0.7
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More v4.0.7
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 trunk 1.0.0 2.0.0 2.0.1 2.0.2 2.0.3 3.0 3.0.1 3.0.2 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.4 3.2.5 3.2.7 3.2.8 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.4.5 3.4.6 3.5.0 3.5.1 3.5.2 3.5.3 3.5.4 3.5.6 3.5.7 3.5.8 3.5.9 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1
superb-blocks / src / gutenberg / form / class-form-permissions.php
superb-blocks / src / gutenberg / form Last commit date
class-form-access-control.php 6 days ago class-form-captcha-handler.php 6 days ago class-form-controller.php 6 days ago class-form-email-config-check.php 6 days ago class-form-email-handler.php 6 days ago class-form-encryption.php 6 days ago class-form-exporter.php 6 days ago class-form-field-validator.php 6 days ago class-form-file-handler.php 6 days ago class-form-google-auth.php 6 days ago class-form-integration-handler.php 6 days ago class-form-math-parser.php 6 days ago class-form-permissions.php 6 days ago class-form-registry.php 6 days ago class-form-settings.php 6 days ago class-form-submission-cpt.php 6 days ago class-form-submission-handler.php 6 days ago
class-form-permissions.php
168 lines
1 <?php
2
3 namespace SuperbAddons\Gutenberg\Form;
4
5 defined('ABSPATH') || exit();
6
7 class FormPermissions
8 {
9 const OPTION_KEY = 'superbaddons_form_role_permissions';
10
11 /**
12 * All available permission capabilities.
13 */
14 private static $capabilities = array('view', 'delete', 'sensitive', 'export', 'spam', 'notes', 'edit', 'configure', 'create');
15
16 /**
17 * Check if the current user has a specific form permission.
18 *
19 * @param string $capability One of: view, delete, sensitive, export, spam, notes
20 * @return bool
21 */
22 public static function Can($capability)
23 {
24 // Admins always have full access
25 if (current_user_can('manage_options')) {
26 return true;
27 }
28
29 // When access control is off, any user with edit_posts has full access
30 if (!FormAccessControl::IsEnabled() && current_user_can('edit_posts')) {
31 return true;
32 }
33
34 $user = wp_get_current_user();
35 if (!$user || !$user->exists()) {
36 return false;
37 }
38
39 $permissions = self::GetAll();
40 $user_roles = (array) $user->roles;
41
42 foreach ($user_roles as $role) {
43 if (isset($permissions[$role]) && isset($permissions[$role][$capability]) && $permissions[$role][$capability]) {
44 return true;
45 }
46 }
47
48 return false;
49 }
50
51 /**
52 * Check if the current user has at least one form permission (for menu visibility).
53 *
54 * @return bool
55 */
56 public static function HasAnyPermission()
57 {
58 if (current_user_can('manage_options')) {
59 return true;
60 }
61
62 // When access control is off, any user with edit_posts has full access
63 if (!FormAccessControl::IsEnabled() && current_user_can('edit_posts')) {
64 return true;
65 }
66
67 $user = wp_get_current_user();
68 if (!$user || !$user->exists()) {
69 return false;
70 }
71
72 $permissions = self::GetAll();
73 $user_roles = (array) $user->roles;
74
75 foreach ($user_roles as $role) {
76 if (isset($permissions[$role])) {
77 foreach (self::$capabilities as $cap) {
78 if (isset($permissions[$role][$cap]) && $permissions[$role][$cap]) {
79 return true;
80 }
81 }
82 }
83 }
84
85 return false;
86 }
87
88 /**
89 * Get all role permissions.
90 *
91 * @return array Associative array: role_slug => array(capability => bool)
92 */
93 public static function GetAll()
94 {
95 $permissions = get_option(self::OPTION_KEY, array());
96 return is_array($permissions) ? $permissions : array();
97 }
98
99 /**
100 * Save all role permissions.
101 *
102 * @param array $permissions
103 * @return bool
104 */
105 public static function SaveAll($permissions)
106 {
107 $sanitized = array();
108
109 if (!is_array($permissions)) {
110 return false;
111 }
112
113 // Only allow known roles
114 $wp_roles = wp_roles();
115 $valid_roles = array_keys($wp_roles->roles);
116
117 foreach ($permissions as $role => $caps) {
118 $role = sanitize_key($role);
119 // Skip administrator and subscriber
120 if ($role === 'administrator' || $role === 'subscriber' || !in_array($role, $valid_roles, true)) {
121 continue;
122 }
123 if (!is_array($caps)) {
124 continue;
125 }
126 $sanitized[$role] = array();
127 foreach (self::$capabilities as $cap) {
128 $sanitized[$role][$cap] = !empty($caps[$cap]);
129 }
130 }
131
132 return update_option(self::OPTION_KEY, $sanitized);
133 }
134
135 /**
136 * Get the list of configurable roles (excludes administrator and subscriber).
137 *
138 * @return array Array of role_slug => role_name
139 */
140 public static function GetConfigurableRoles()
141 {
142 $wp_roles = wp_roles();
143 $roles = array();
144 foreach ($wp_roles->roles as $slug => $role) {
145 if ($slug === 'administrator' || $slug === 'subscriber') {
146 continue;
147 }
148 $roles[$slug] = isset($role['name']) ? translate_user_role($role['name']) : $slug;
149 }
150 return $roles;
151 }
152
153 /**
154 * Get the current user's permissions as an associative array.
155 * Used for JS localization.
156 *
157 * @return array
158 */
159 public static function GetCurrentUserPermissions()
160 {
161 $result = array();
162 foreach (self::$capabilities as $cap) {
163 $result[$cap] = self::Can($cap);
164 }
165 return $result;
166 }
167 }
168