Index: wp-includes/post-template.php
===================================================================
--- wp-includes/post-template.php	(revision 7911)
+++ wp-includes/post-template.php	(working copy)
@@ -641,7 +641,11 @@
 
 	$rows = '';
 	$class = false;
+	$can_edit_post = current_user_can( 'edit_post', $post->ID );
 	foreach ( $revisions as $revision ) {
+		if ( !current_user_can( 'read_post', $revision->ID ) )
+			continue;
+
 		$date = wp_post_revision_title( $revision );
 		$name = get_author_name( $revision->post_author );
 
@@ -654,7 +658,7 @@
 
 			$class = $class ? '' : " class='alternate'";
 
-			if ( $post->ID != $revision->ID && current_user_can( 'edit_post', $post->ID ) )
+			if ( $post->ID != $revision->ID && $can_edit_post )
 				$actions = '<a href="' . wp_nonce_url( add_query_arg( array( 'revision' => $revision->ID, 'diff' => false, 'action' => 'restore' ) ), "restore-post_$post->ID|$revision->ID" ) . '">' . __( 'Restore' ) . '</a>';
 			else
 				$actions = '';
Index: wp-admin/revision.php
===================================================================
--- wp-admin/revision.php	(revision 7911)
+++ wp-admin/revision.php	(working copy)
@@ -38,7 +38,7 @@
 	if ( !$right_revision = get_post( $right ) )
 		break;
 
-	if ( !current_user_can( 'edit_post', $left_revision->ID ) || !current_user_can( 'edit_post', $right_revision->ID ) )
+	if ( !current_user_can( 'read_post', $left_revision->ID ) || !current_user_can( 'read_post', $right_revision->ID ) )
 		break;
 
 	// Don't allow reverse diffs?
@@ -80,7 +80,7 @@
 	if ( !$post = get_post( $revision->post_parent ) )
 		break;
 
-	if ( !current_user_can( 'edit_post', $revision->ID ) || !current_user_can( 'edit_post', $post->ID ) )
+	if ( !current_user_can( 'read_post', $revision->ID ) || !current_user_can( 'read_post', $post->ID ) )
 		break;
 
 	$post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
