Index: view_unpublished.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/view_unpublished/view_unpublished.module,v
retrieving revision 1.2.4.1
diff -u -p -r1.2.4.1 view_unpublished.module
--- view_unpublished.module	30 Aug 2009 19:48:24 -0000	1.2.4.1
+++ view_unpublished.module	8 Jul 2010 19:24:02 -0000
@@ -29,8 +29,37 @@ function view_unpublished_perm() {
  * Modifies the path node/nid to use our access callback.
  */
 function view_unpublished_menu_alter(&$items) { 
+  // View unpublished nodes
   $items['node/%node']['access callback'] = '_view_unpublished_node_access';
   $items['node/%node']['access arguments'] = array(1);
+  // View/manage revisions
+  $paths = array(
+    'node/%node/revisions',
+    'node/%node/revisions/%/view',
+    'node/%node/revisions/%/revert',
+    'node/%node/revisions/%/delete',
+    'node/%node/revisions/view/%/%',
+  );
+  // User should have both revision permissions and view unpublished 
+  // permissions in order to manipulate revisions..
+  $revision_grants = array(
+    'node/%node/revisions/view', 
+    'node/%node/revisions/revert',
+    'node/%node/revisions/delete',
+  );
+  foreach ($paths as $path) {
+    // Check user's revision access
+    if (in_array($path, $revision_grants)) {
+      $callback = $items[$path]['access callback'];
+      $args = $items[$path]['access arguments'];
+      $grant = call_user_func_array($callback, $args); 
+      if ($grand == FALSE OR !user_access('view revisions')) {
+        continue;
+      }
+    }
+    $items[$path]['access callback'] = '_view_unpublished_node_access';
+    $items[$path]['access arguments'] = array(1);
+  }
 }
 
 /**
