diff -r 10f8ad4e2e03 modules/views/modules/node.views.inc
--- a/modules/views/modules/node.views.inc	Wed Jul 13 13:39:12 2011 +0200
+++ b/modules/views/modules/node.views.inc	Thu Jul 14 09:32:11 2011 +0200
@@ -668,10 +668,25 @@
 /**
  * Implements hook_views_query_substitutions().
  */
-function node_views_query_substitutions() {
+function node_views_query_substitutions($view) {
+  if (isset($view->where)) {
+    $conditions = $view->where[0]['conditions'];
+    foreach ($conditions as $condition){
+      if($condition['field'] == "node.type"){
+        $type = $condition['value'][0];
+      }
+    }
+  }
+  if (isset($type)) {
+    $unpublished_type = user_access("view unpublished " . $type . " content");
+  }
+  else{
+    $unpublished_type = 0;
+  }
   return array(
     '***ADMINISTER_NODES***' => intval(user_access('administer nodes')),
     '***VIEW_OWN_UNPUBLISHED_NODES***' => intval(user_access('view own unpublished content')),
+    '***VIEW_UNPUBLISHED_NODES***' => intval($unpublished_type),
   );
 }
 
diff -r 10f8ad4e2e03 modules/views/modules/node/views_handler_filter_node_status.inc
--- a/modules/views/modules/node/views_handler_filter_node_status.inc	Wed Jul 13 13:39:12 2011 +0200
+++ b/modules/views/modules/node/views_handler_filter_node_status.inc	Thu Jul 14 09:32:11 2011 +0200
@@ -9,6 +9,9 @@
 
   function query() {
     $table = $this->ensure_my_table();
-    $this->query->add_where_expression($this->options['group'], "$table.status = 1 OR ($table.uid = ***CURRENT_USER*** AND ***CURRENT_USER*** <> 0 AND ***VIEW_OWN_UNPUBLISHED_NODES*** = 1) OR ***ADMINISTER_NODES*** = 1");
+    $this->query->add_where_expression($this->options['group'], "$table.status = 1 OR ".
+      "(***CURRENT_USER*** <> 0 AND ***VIEW_UNPUBLISHED_NODES*** = 1) OR ".
+      "($table.uid = ***CURRENT_USER*** AND ***CURRENT_USER*** <> 0 AND ***VIEW_OWN_UNPUBLISHED_NODES*** = 1) OR ".
+      "***ADMINISTER_NODES*** = 1");
   }
 }
