Remove users access to dashboard

Removing the dashboard:

/* Remove the "Dashboard" from the admin menu for non-admin users */
function wpse54085_remove_dashboard () {
    global $current_user, $menu, $submenu;
    get_currentuserinfo();

    if( ! in_array( 'administrator', $current_user->roles ) ) {
        reset( $menu );
        $page = key( $menu );
        while( ( __( 'Dashboard' ) != $menu[$page][0] ) && next( $menu ) ) {
            $page = key( $menu );
        }
        if( __( 'Dashboard' ) == $menu[$page][0] ) {
            unset( $menu[$page] );
        }
        reset($menu);
        $page = key($menu);
        while ( ! $current_user->has_cap( $menu[$page][1] ) && next( $menu ) ) {
            $page = key( $menu );
        }
        if ( preg_match( '#wp-admin/?(index.php)?$#', $_SERVER['REQUEST_URI'] ) && ( 'index.php' != $menu[$page][2] ) ) {
            wp_redirect( get_option( 'siteurl' ) . '/wp-admin/post-new.php');
        }
    }
}
add_action( 'admin_menu', 'wpse54085_remove_dashboard' );

Removing further parts of the admin menu:

Here you can use the remove_menu_page() function.

function wpse54085_admin_menu_fixes() {
    global $current_user;

    if( ! in_array( 'administrator', $current_user->roles ) ) {
        remove_menu_page('link-manager.php');
        /* add more menu pages, depending on what you want to remove */
    }
}
add_action( 'admin_menu', 'wpse54085_admin_menu_fixes' );

Obviously either function can be extended to differentiate between further user roles. Both should be added to your theme’s functions.php file.