Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.665
diff -u -F^function -r1.665 node.module
--- modules/node/node.module	2 Aug 2006 13:44:07 -0000	1.665
+++ modules/node/node.module	4 Aug 2006 14:13:54 -0000
@@ -581,7 +581,7 @@ function node_show($node, $cid) {
  * Implementation of hook_perm().
  */
 function node_perm() {
-  return array('administer nodes', 'access content', 'view revisions', 'revert revisions');
+  return array('administer nodes', 'access content', 'edit any node', 'view unpublished nodes', 'view revisions', 'revert revisions');
 }
 
 /**
@@ -2372,6 +2372,14 @@ function node_access($op, $node = NULL, 
     return TRUE;
   }
 
+  if ($op == 'view' && $node->status == 0 && user_access('view unpublished nodes')) {
+    return TRUE;
+  }
+
+  if ($op == 'update' && user_access('edit any node')) {
+    return TRUE;
+  }
+
   if (!user_access('access content')) {
     return FALSE;
   }
Index: modules/page/page.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/page/page.module,v
retrieving revision 1.156
diff -u -F^function -r1.156 page.module
--- modules/page/page.module	31 Jul 2006 11:25:54 -0000	1.156
+++ modules/page/page.module	4 Aug 2006 14:13:54 -0000
@@ -38,7 +38,7 @@ function page_help($section) {
  * Implementation of hook_perm().
  */
 function page_perm() {
-  return array('create pages', 'edit own pages');
+  return array('create pages', 'edit own pages', 'edit any page', 'view unpublished pages');
 }
 
 /**
@@ -57,9 +57,13 @@ function page_access($op, $node) {
   if ($op == 'create') {
     return user_access('create pages');
   }
+  
+  if ($op == 'view' && $node->status == 0 && user_access('view unpublished pages')) {
+    return TRUE;
+  }
 
   if ($op == 'update' || $op == 'delete') {
-    if (user_access('edit own pages') && ($user->uid == $node->uid)) {
+    if ((user_access('edit own pages') && ($user->uid == $node->uid)) || user_access('edit any page')) {
       return TRUE;
     }
   }
Index: modules/story/story.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/story/story.module,v
retrieving revision 1.188
diff -u -F^function -r1.188 story.module
--- modules/story/story.module	31 Jul 2006 11:25:54 -0000	1.188
+++ modules/story/story.module	4 Aug 2006 14:13:55 -0000
@@ -40,7 +40,7 @@ function story_node_info() {
  * Implementation of hook_perm().
  */
 function story_perm() {
-  return array('create stories', 'edit own stories');
+  return array('create stories', 'edit own stories', 'edit any story', 'view unpublished stories');
 }
 
 /**
@@ -53,8 +53,12 @@ function story_access($op, $node) {
     return user_access('create stories');
   }
 
+  if ($op == 'view' && $node->status == 0 && user_access('view unpublished stories')) {
+    return TRUE;
+  }
+
   if ($op == 'update' || $op == 'delete') {
-    if (user_access('edit own stories') && ($user->uid == $node->uid)) {
+    if ((user_access('edit own stories') && ($user->uid == $node->uid)) || user_access('edit any story')) {
       return TRUE;
     }
   }
