$user = $userId ? get_userdata($userId) : wp_get_current_user();
- if ($user->has_cap('super admin') || $user->has_cap('administrator')) {
+ if ($userId !== 0 && ($user->has_cap('super admin') || $user->has_cap('administrator'))) {
return TRUE;
}
// Make string lowercase and convert spaces into underscore
$str = CRM_Utils_String::munge(strtolower($str));
- if ($user->exists()) {
+ if ($userId !== 0 && $user->exists()) {
// Check whether the logged in user has the capabilitity
if ($user->has_cap($str)) {
return TRUE;
else {
//check the capabilities of Anonymous user)
$roleObj = new WP_Roles();
- if (
- $roleObj->get_role('anonymous_user') != NULL &&
- array_key_exists($str, $roleObj->get_role('anonymous_user')->capabilities)
- ) {
+ $anonObj = $roleObj->get_role('anonymous_user');
+ if (!empty($anonObj->capabilities) && array_key_exists($str, $anonObj->capabilities)) {
return TRUE;
}
}
return FALSE;
}
+ /**
+ * @inheritDoc
+ */
+ public function getAvailablePermissions() {
+ // We want to list *only* WordPress perms, so we'll *skip* Civi perms.
+ $mungedCorePerms = array_map(
+ function($str) {
+ return CRM_Utils_String::munge(strtolower($str));
+ },
+ array_keys(\CRM_Core_Permission::basicPermissions(TRUE))
+ );
+
+ // WP doesn't have an API to list all capabilities. However, we can discover a
+ // pretty good list by inspecting the (super)admin roles.
+ $wpCaps = [];
+ foreach (wp_roles()->roles as $wpRole) {
+ $wpCaps = array_unique(array_merge(array_keys($wpRole['capabilities']), $wpCaps));
+ }
+
+ $permissions = [];
+ foreach ($wpCaps as $wpCap) {
+ if (!in_array($wpCap, $mungedCorePerms)) {
+ $permissions["WordPress:$wpCap"] = [
+ 'title' => "WordPress: $wpCap",
+ ];
+ }
+ }
+ return $permissions;
+ }
+
/**
* @inheritDoc
*/