Index: src/wp-includes/admin-bar.php
===================================================================
--- src/wp-includes/admin-bar.php	(revision 33929)
+++ src/wp-includes/admin-bar.php	(working copy)
@@ -179,11 +179,18 @@
 function wp_admin_bar_my_account_item( $wp_admin_bar ) {
 	$user_id      = get_current_user_id();
 	$current_user = wp_get_current_user();
-	$profile_url  = get_edit_profile_url( $user_id );
 
 	if ( ! $user_id )
 		return;
 
+	if ( current_user_can( 'read' ) ) {
+		$profile_url = get_edit_profile_url( $user_id );
+	} elseif ( is_multisite() ) {
+		$profile_url = get_dashboard_url( $user_id, 'profile.php' );
+	} else {
+		$profile_url = '#';
+	}
+
 	$avatar = get_avatar( $user_id, 26 );
 	$howdy  = sprintf( __('Howdy, %1$s'), $current_user->display_name );
 	$class  = empty( $avatar ) ? '' : 'with-avatar';
@@ -209,11 +216,18 @@
 function wp_admin_bar_my_account_menu( $wp_admin_bar ) {
 	$user_id      = get_current_user_id();
 	$current_user = wp_get_current_user();
-	$profile_url  = get_edit_profile_url( $user_id );
 
 	if ( ! $user_id )
 		return;
 
+	if ( current_user_can( 'read' ) ) {
+		$profile_url = get_edit_profile_url( $user_id );
+	} elseif ( is_multisite() ) {
+		$profile_url = get_dashboard_url( $user_id, 'profile.php' );
+	} else {
+		$profile_url = '#';
+	}
+
 	$wp_admin_bar->add_group( array(
 		'parent' => 'my-account',
 		'id'     => 'user-actions',
@@ -234,12 +248,16 @@
 			'tabindex' => -1,
 		),
 	) );
-	$wp_admin_bar->add_menu( array(
-		'parent' => 'user-actions',
-		'id'     => 'edit-profile',
-		'title'  => __( 'Edit My Profile' ),
-		'href' => $profile_url,
-	) );
+
+	if ( '#' !== $profile_url ) {
+		$wp_admin_bar->add_menu( array(
+			'parent' => 'user-actions',
+			'id'     => 'edit-profile',
+			'title'  => __( 'Edit My Profile' ),
+			'href'   => $profile_url,
+		) );
+	}
+
 	$wp_admin_bar->add_menu( array(
 		'parent' => 'user-actions',
 		'id'     => 'logout',
@@ -281,7 +299,7 @@
 	$wp_admin_bar->add_menu( array(
 		'id'    => 'site-name',
 		'title' => $title,
-		'href'  => is_admin() ? home_url( '/' ) : admin_url(),
+		'href'  => ( is_admin() || ! current_user_can( 'read' ) ) ? home_url( '/' ) : admin_url(),
 	) );
 
 	// Create submenu items.
@@ -304,7 +322,7 @@
 			) );
 		}
 
-	} else {
+	} else if ( current_user_can( 'read' ) ) {
 		// We're on the front end, link to the Dashboard.
 		$wp_admin_bar->add_menu( array(
 			'parent' => 'site-name',
