How to hide user profile(edit current password, email, picture, everything) based on role?
You can set access for fields as FALSE as per user roles.

function YOURMODULE_form_user_profile_form_alter(&amp;$form, &amp;$form_state) {
  global $user;
  if(in_array('your_role_name',$user-&gt;roles)) {
    $form['account']['pass']['#access'] = FALSE;
    // Similarly other fields, but fields can not be required fields on profile.
  }
}