Index: modules/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node.module,v
retrieving revision 1.565
diff -u -r1.565 node.module
--- modules/node.module	14 Dec 2005 20:08:30 -0000	1.565
+++ modules/node.module	14 Dec 2005 20:42:40 -0000
@@ -581,7 +581,7 @@
  * Implementation of hook_perm().
  */
 function node_perm() {
-  return array('administer nodes', 'access content');
+  return array('administer nodes', 'access content', 'edit any node', 'view unpublished nodes');
 }
 
 /**
@@ -2146,6 +2146,14 @@
   if (!user_access('access content')) {
     return FALSE;
   }
+  
+  if ($op == 'view' && $node->status == 0 && user_access('view unpublished nodes')) {
+    return TRUE;
+  }
+
+  if (user_access('edit any node')) {
+    return TRUE;
+  }
 
   // Can't use node_invoke(), because the access hook takes the $op parameter
   // before the $node parameter.
Index: modules/page.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/page.module,v
retrieving revision 1.147
diff -u -r1.147 page.module
--- modules/page.module	5 Dec 2005 09:11:33 -0000	1.147
+++ modules/page.module	14 Dec 2005 20:43:27 -0000
@@ -38,7 +38,7 @@
  * 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');
 }
 
 /**
@@ -58,8 +58,12 @@
     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.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/story.module,v
retrieving revision 1.179
diff -u -r1.179 story.module
--- modules/story.module	5 Dec 2005 09:11:33 -0000	1.179
+++ modules/story.module	14 Dec 2005 20:44:21 -0000
@@ -40,7 +40,7 @@
  * 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 @@
     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;
     }
   }