--- node.module	2007-03-07 16:32:51.000000000 +0100
+++ node_patched.module	2007-03-07 18:32:00.000000000 +0100
@@ -775,7 +775,12 @@
  * Implementation of hook_perm().
  */
 function node_perm() {
-  $perms = array('administer content types', 'administer nodes', 'access content', 'view revisions', 'revert revisions');
+  $perms = array('administer content types', 
+                 'administer nodes', 
+                 'access content', 
+                 'view revisions', 
+                 'revert revisions', 
+                 'administer revisions');
 
   foreach (node_get_types() as $type) {
     if ($type->module == 'node') {
@@ -783,6 +788,7 @@
       $perms[] = 'create '. $name .' content';
       $perms[] = 'edit own '. $name .' content';
       $perms[] = 'edit '. $name .' content';
+      $perms[] = 'delete own '. $name .' content';
     }
   }
 
@@ -1194,7 +1200,7 @@
           'access' => node_access('delete', $node),
           'weight' => 1,
           'type' => MENU_CALLBACK);
-        $revisions_access = ((user_access('view revisions') || user_access('administer nodes')) && node_access('view', $node) && db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d', arg(1))) > 1);
+        $revisions_access = ((user_access('view revisions') || user_access('administer revisions')) && node_access('view', $node) && db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d', arg(1))) > 1);
         $items[] = array('path' => 'node/'. arg(1) .'/revisions', 'title' => t('Revisions'),
           'callback' => 'node_revisions',
           'access' => $revisions_access,
@@ -1637,11 +1643,11 @@
 
   $rows = array();
   $revert_permission = FALSE;
-  if ((user_access('revert revisions') || user_access('administer nodes')) && node_access('update', $node)) {
+  if ((user_access('revert revisions') || user_access('administer revisions')) && node_access('update', $node)) {
     $revert_permission = TRUE;
   }
   $delete_permission = FALSE;
-  if (user_access('administer nodes')) {
+  if (user_access('administer revisions') && node_access('delete', $node)) {
     $delete_permission = TRUE;
   }
   foreach ($revisions as $revision) {
@@ -1658,10 +1664,10 @@
       $row[] = t('!date by !username', array('!date' => l(format_date($revision->timestamp, 'small'), "node/$node->nid/revisions/$revision->vid/view"), '!username' => theme('username', $revision)))
                . (($revision->log != '') ? '<p class="revision-log">'. filter_xss($revision->log) .'</p>' : '');
       if ($revert_permission) {
-        $operations[] = l(t('revert'), "node/$node->nid/revisions/$revision->vid/revert");
+        $operations[] = array('#value' => l(t('revert'), "node/$node->nid/revisions/$revision->vid/revert"));
       }
       if ($delete_permission) {
-        $operations[] = l(t('delete'), "node/$node->nid/revisions/$revision->vid/delete");
+        $operations[] = array('#value' => l(t('delete'), "node/$node->nid/revisions/$revision->vid/delete"));
       }
     }
     $rows[] = array_merge($row, $operations);
@@ -1705,7 +1711,7 @@
  * revision is deleted.
  */
 function node_revision_delete($nid, $revision) {
-  if (user_access('administer nodes')) {
+  if (user_access('administer revisions')) {
     $node = node_load($nid);
     if (node_access('delete', $node)) {
       // Don't delete the current revision
@@ -2317,7 +2323,7 @@
     switch ($op) {
       case 'overview':
         $node = node_load(arg(1));
-        if ((user_access('view revisions') || user_access('administer nodes')) && node_access('view', $node)) {
+        if ((user_access('view revisions') || user_access('administer revisions')) && node_access('view', $node)) {
           return node_revision_overview($node);
         }
         drupal_access_denied();
@@ -2326,7 +2332,7 @@
         if (is_numeric(arg(3))) {
           $node = node_load(arg(1), arg(3));
           if ($node->nid) {
-            if ((user_access('view revisions') || user_access('administer nodes')) && node_access('view', $node)) {
+            if ((user_access('view revisions') || user_access('administer revisions')) && node_access('view', $node)) {
               drupal_set_title(t('Revision of %title from %date', array('%title' => $node->title, '%date' => format_date($node->revision_timestamp))));
               return node_show($node, arg(2));
             }
@@ -2635,6 +2641,20 @@
   if (user_access('administer nodes')) {
     return TRUE;
   }
+  
+  if ($op == 'delete') {
+    foreach (node_get_types() as $type) {
+      if ($type->module == 'node' && $node->type == check_plain($type->type) && $node->uid == $user->uid) {
+        return user_access('delete own '. check_plain($type->type) .' nodes');
+      }
+      elseif (user_access('administer nodes')) {
+        return TRUE;
+      }
+      else {
+        return FALSE;
+      }
+    }
+  }
 
   if (!user_access('access content')) {
     return FALSE;
