Index: dashboard.php
===================================================================
--- dashboard.php	(revision 17521)
+++ dashboard.php	(working copy)
@@ -604,17 +604,21 @@
 	// Select all comment types and filter out spam later for better query performance.
 	$comments = array();
 	$start = 0;
+	$can_moderate = current_user_can( 'moderate_comments' );
 
 	$widgets = get_option( 'dashboard_widget_options' );
 	$total_items = isset( $widgets['dashboard_recent_comments'] ) && isset( $widgets['dashboard_recent_comments']['items'] )
 		? absint( $widgets['dashboard_recent_comments']['items'] ) : 5;
 
-	while ( count( $comments ) < 5 && $possible = $wpdb->get_results( "SELECT * FROM $wpdb->comments c LEFT JOIN $wpdb->posts p ON c.comment_post_ID = p.ID WHERE p.post_status != 'trash' ORDER BY c.comment_date_gmt DESC LIMIT $start, 50" ) ) {
+	if ( $total_items < 1 || $total_items > 50 ) // some sanity
+		$total_items = 5;
 
+	while ( count( $comments ) < $total_items && $possible = $wpdb->get_results( "SELECT * FROM $wpdb->comments c LEFT JOIN $wpdb->posts p ON c.comment_post_ID = p.ID WHERE p.post_status != 'trash' ORDER BY c.comment_date_gmt DESC LIMIT $start, 50" ) ) {
+
 		foreach ( $possible as $comment ) {
 			if ( count( $comments ) >= $total_items )
 				break;
-			if ( in_array( $comment->comment_approved, $allowed_states ) && current_user_can( 'read_post', $comment->comment_post_ID ) )
+			if ( in_array( $comment->comment_approved, $allowed_states ) && ( $can_moderate || current_user_can( 'read_post', $comment->comment_post_ID ) ) )
 				$comments[] = $comment;
 		}
 
