Using a different view mode with a node I understand using Views you can use a different view mode, e.g. teaser or full content. 

Is it possible to view a node using a view mode other than the full content view mode?
What I want to achieve is being able to display different fields depending on the user's role.
You can override the page callback used on a node page to use your own function that will select the view mode based on the current user role.

/**
 * Implements hook_menu_alter().
 */
function MODULE_menu_alter(&amp;$items) {
   $items['node/%node']['page callback'] = 'MODULE_node_page_view';
}

/**
 * Copy of the original node_page_view to use result from our
 * MODULE_node_show($node) as return value.
 */
function MODULE_node_page_view($node) {
  global $user;
  // If there is a menu link to this node, the link becomes the last part
  // of the active trail, and the link name becomes the page title.
  // Thus, we must explicitly set the page title to be the node title.
  drupal_set_title($node-&gt;title);
  $uri = entity_uri('node', $node);
  // Set the node path as the canonical URL to prevent duplicate content.
  drupal_add_html_head_link(array('rel' =&gt; 'canonical', 'href' =&gt; url($uri['path'], $uri['options'])), TRUE);
  // Set the non-aliased path as a default shortlink.
  drupal_add_html_head_link(array('rel' =&gt; 'shortlink', 'href' =&gt; url($uri['path'], array_merge($uri['options'], array('alias' =&gt; TRUE)))), TRUE);
  return MODULE_node_show($node);
}


/**
 * Copy of the original node_page_view to use result from our
 * MODULE_node_show($node) as return value.
 */
function MODULE_node_show($node, $message = FALSE) {
  if ($message) {
    drupal_set_title(t('Revision of %title from %date', array('%title' =&gt; $node-&gt;title, '%date' =&gt; format_date($node-&gt;revision_timestamp))), PASS_THROUGH);
  }

  $view_mode = MODULE_user_node_view_mode($node, $user); 

  // For markup consistency with other pages, use node_view_multiple() rather than node_view().
  $nodes = node_view_multiple(array($node-&gt;nid =&gt; $node), $view_mode);

  // Update the history table, stating that this user viewed this node.
  node_tag_new($node);

  return $nodes;
}

/**
 * Determines the view mode to use for the node page of the given node
 * when viewed by the given user.
 * @param $node
 *  The viewed node object
 * @param $account
 *  The viewing user object
 */
function MODULE_user_node_view_mode($node, $account) {
  // ... Implement your custom view mode selection logic here
}


Note: There is probably something that need to be done to ensure the page using a given view mode is not cached and re-used for different user.