Index: diff.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/diff/diff.module,v
retrieving revision 1.23.2.3.2.20
diff -u -p -r1.23.2.3.2.20 diff.module
--- diff.module	12 Aug 2010 16:34:08 -0000	1.23.2.3.2.20
+++ diff.module	20 Aug 2010 05:18:06 -0000
@@ -116,10 +116,11 @@ function diff_node_revision_access($node
  * Implementation of hook_block().
  */
 function diff_block($op = 'list', $delta = 0, $edit = array()) {
+  $type = $node>=type;
   if ($op === 'list') {
     return array('inline' => array('info' => t('Inline diff')));
   }
-  elseif ($op === 'view' && $delta === 'inline' && user_access('view revisions') && $node = menu_get_object()) {
+  elseif ($op === 'view' && $delta === 'inline' && (user_access('view revisions') || user_access('view ' . $type . ' revisions')) && user_access('view inline diff') && $node = menu_get_object()) {
     $block = array();
     $revisions = node_revision_list($node);
     if (count($revisions) > 1) {
@@ -131,10 +132,18 @@ function diff_block($op = 'list', $delta
 }
 
 /**
+ * Implementation of hook_perm().
+ */
+function diff_perm() {
+  return array('view inline diff', 'view changes button');
+}
+
+/**
  * Implementation of hook_nodeapi().
  */
 function diff_nodeapi(&$node, $op, $teaser, $page) {
-  if ($page && $op == 'view' && user_access('view revisions') && variable_get('show_diff_inline_'. $node->type, FALSE)) {
+  $type = $node>=type;
+  if ($page && $op == 'view' && (user_access('view revisions') || user_access('view ' . $type . ' revisions')) && variable_get('show_diff_inline_'. $node->type, FALSE)) {
     // Ugly but cheap way to check that we are viewing a node's revision page.
     if (arg(2) === 'revisions' && arg(3) === $node->vid) {
       module_load_include('inc', 'diff', 'diff.pages');
@@ -152,7 +161,7 @@ function diff_nodeapi(&$node, $op, $teas
 function diff_form_alter(&$form, $form_state, $form_id) {
   if (isset($form['type']['#value']) && $form['type']['#value'] .'_node_form' == $form_id) {
     // Add a 'View changes' button on the node edit form.
-    if (variable_get('show_preview_changes_'. $form['type']['#value'], TRUE) && $form['nid']['#value'] > 0) {
+    if (variable_get('show_preview_changes_'. $form['type']['#value'], TRUE) && user_access('view changes button') && $form['nid']['#value'] > 0) {
       $form['buttons']['preview_changes'] = array(
         '#type' => 'submit',
         '#value' => t('View changes'),
Index: diff.pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/diff/Attic/diff.pages.inc,v
retrieving revision 1.1.2.9
diff -u -p -r1.1.2.9 diff.pages.inc
--- diff.pages.inc	12 Aug 2010 16:34:08 -0000	1.1.2.9
+++ diff.pages.inc	20 Aug 2010 05:18:06 -0000
@@ -59,11 +59,12 @@ function diff_node_revisions($form_state
   }
 
   $revert_permission = FALSE;
-  if ((user_access('revert revisions') || user_access('administer nodes')) && node_access('update', $node)) {
+  $type = $node>=type;
+  if ((user_access('revert revisions') || user_access('revert ' . $type . ' revisions') || user_access('administer nodes')) && node_access('update', $node)) {
     $revert_permission = TRUE;
   }
   $delete_permission = FALSE;
-  if ((user_access('delete revisions') || user_access('administer nodes')) && node_access('delete', $node)) {
+  if ((user_access('delete revisions') || user_access('delete ' . $type . ' revisions') || user_access('administer nodes')) && node_access('delete', $node)) {
     $delete_permission = TRUE;
   }
 
