WordPress: Denying users access to dashboard but allowing AJAX requests?

Solution:

You can use

function sm_restrict_admin_with_redirect() {

if( defined('DOING_AJAX') && DOING_AJAX ) {
        //Allow ajax calls
        return;
  }


  if( ! current_user_can( "manage_options" ) ) {
       //Redirect to main page if the user has no "manage_options" capability
       wp_redirect( get_site_url() );
       exit;
  }
}

add_action( 'admin_init', 'sm_restrict_admin_with_redirect', 1 );