diff --git a/administerusersbyrole.module b/administerusersbyrole.module index 17b2cd0..55bdbd8 100644 --- a/administerusersbyrole.module +++ b/administerusersbyrole.module @@ -157,6 +157,41 @@ function administerusersbyrole_form_user_profile_form_alter(&$form, &$form_state } /** + * Implements hook_form_FORM_ID_alter(). + * + * Make the user edit form consider our permissions when determining which + * elements should be visible to administrators. + */ + +function administerusersbyrole_form_user_admin_account_alter(&$form, &$form_state) { + + $form['#validate'][] = '_validate_user_block_n_unblock_permissions'; +} + +function _validate_user_block_n_unblock_permissions(&$form, &$form_state) { + global $user; + + foreach (array_filter($form_state['input']['accounts']) as $uid => $value) { + $account = user_load($uid); + + foreach ($account->roles as $rid => $role) { + if ($rid === DRUPAL_AUTHENTICATED_RID) { + continue; + } + + if (user_access(_administerusersbyrole_build_perm_string($role, 'edit', TRUE))) { + return TRUE; + } + if (!user_access(_administerusersbyrole_build_perm_string($role, 'edit', FALSE))) { + if ($form_state['input']['operation'] == 'block' || $form_state['input']['operation'] == 'unblock') { + form_set_error($role, t('You do not have permission to block/unblock %user.', array('%user' => $account->name))); + } + } + } + } +} + +/** * Generates a permission string for a given a role name. */ function _administerusersbyrole_build_perm_string($role_name, $op = 'edit', $other = FALSE) {