diff --git a/core/modules/node/node.admin.inc b/core/modules/node/node.admin.inc
index e197f60..9cd853e 100644
--- a/core/modules/node/node.admin.inc
+++ b/core/modules/node/node.admin.inc
@@ -453,7 +453,9 @@ function node_admin_nodes() {
   $query = db_select('node', 'n')->extend('PagerDefault')->extend('TableSort');
   node_build_filter_query($query);
 
-  if (!user_access('bypass node access')) {
+  // If the user is allowed to bypass node access or if the user is allowed to
+  // view all unpublished content, then we don't need to add any extra checks.
+  if (!user_access('bypass node access') && !user_access('view any unpublished content')) {
     // If the user is able to view their own unpublished nodes, allow them
     // to see these in addition to published nodes. Check that they actually
     // have some unpublished nodes to view before adding the condition.
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 93f0ddc..aa9edc7 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1606,6 +1606,9 @@ function node_permission() {
     'view own unpublished content' => array(
       'title' => t('View own unpublished content'),
     ),
+    'view any unpublished content' => array(
+      'title' => t('View any unpublished content'),
+    ),
     'view revisions' => array(
       'title' => t('View content revisions'),
     ),
@@ -2309,8 +2312,9 @@ function node_block_save($delta = '', $edit = array()) {
  */
 function node_get_recent($number = 10) {
   $query = db_select('node', 'n');
-
-  if (!user_access('bypass node access')) {
+  // If the user is allowed to bypass node access or if the user is allowed to
+  // view all unpublished content, then we don't need to add any extra checks.
+  if (!user_access('bypass node access') && !user_access('view any unpublished content')) {
     // If the user is able to view their own unpublished nodes, allow them
     // to see these in addition to published nodes. Check that they actually
     // have some unpublished nodes to view before adding the condition.
@@ -3054,10 +3058,16 @@ function node_access($op, $node, $account = NULL) {
     return TRUE;
   }
 
-  // Check if authors can view their own unpublished nodes.
-  if ($op == 'view' && !$node->status && user_access('view own unpublished content', $account) && $account->uid == $node->uid && $account->uid != 0) {
-    $rights[$account->uid][$cid][$op] = TRUE;
-    return TRUE;
+  // Check access for unpublished nodes.
+  if ($op == 'view' && !$node->status ) {
+    // Allow access if the user can view any unpublished content or if the user
+    // is viewing his own content and has the 'view own unpublished content'
+    // permission.
+    if (user_access('view any unpublished content', $account)
+        || (user_access('view own unpublished content', $account) && $account->uid != 0 && $account->uid == $node->uid)) {
+      $rights[$account->uid][$cid][$op] = TRUE;
+      return TRUE;
+    }
   }
 
   // If the module did not override the access rights, use those set in the
diff --git a/core/modules/node/node.test b/core/modules/node/node.test
index f828164..7340e8b 100644
--- a/core/modules/node/node.test
+++ b/core/modules/node/node.test
@@ -879,6 +879,14 @@ class NodeAccessUnitTest extends DrupalWebTestCase {
     $this->assertNodeAccess(array('view' => TRUE, 'update' => FALSE), $node4, $web_user4);
     $this->assertNodeAccess(array('view' => FALSE), $node4, $web_user5);
 
+    // User with 'view any unpublished content' can view own unpublished content.
+    $web_user6 = $this->drupalCreateUser(array('access content', 'view any unpublished content'));
+    $node5 = $this->drupalCreateNode(array('status' => 0, 'uid' => $web_user6->uid));
+    $this->assertNodeAccess(array('view' => TRUE, 'update' => FALSE), $node5, $web_user6);
+    // User with 'view any unpublished content' can view other users unpublished
+    // content.
+    $this->assertNodeAccess(array('view' => TRUE, 'update' => FALSE), $node4, $web_user6);
+
     // Tests the default access provided for a published node.
     $node5 = $this->drupalCreateNode();
     $this->assertNodeAccess(array('view' => TRUE, 'update' => FALSE, 'delete' => FALSE), $node5, $web_user3);
