Index: pm_block_user/pm_block_user.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/privatemsg/pm_block_user/pm_block_user.module,v
retrieving revision 1.1
diff -w -u -p -r1.1 pm_block_user.module
--- pm_block_user/pm_block_user.module	5 Nov 2008 05:29:47 -0000	1.1
+++ pm_block_user/pm_block_user.module	24 Dec 2008 13:56:30 -0000
@@ -14,13 +14,31 @@ function pm_block_user_menu() {
     'title'            => 'Block user messages',
     'page callback'    => 'drupal_get_form',
     'page arguments'   => array('pm_block_user_form', 2),
-    'access arguments' => array('read privatemsg'),
+    'access callback'  => '_pm_block_user_access',
+    'access arguments' => array(2),
     'type'             => MENU_CALLBACK,
     'weight'           => -10,
   );
   return $items;
 }
 
+function _pm_block_user_access($account) {
+  global $user;
+  if (!user_access('read privatemsg', $user)) {
+    return FALSE;
+  }
+  
+  if (user_access('unblockable', $account)) {
+    return FALSE;
+  }
+
+  return true;
+}
+
+function pm_block_user_perm() {
+  return array('unblockable');
+}
+
 function pm_block_user_form($form_state, $author) {
   global $user;
 
@@ -105,6 +123,10 @@ function pm_block_user_form_submit($form
   $author_id = db_result(db_query('SELECT author FROM {pm_message} WHERE mid = %d', $pmid));
   $thread = db_result(db_query('SELECT thread_id FROM {pm_index} WHERE mid = %d', $pmid));
 
+  if (user_access('unblockable', user_load($author_id))) {
+    return;
+  }
+
   if ($user->uid <> $author_id) {
     if (db_result(db_query('SELECT COUNT(recipient) FROM {pm_block_user} WHERE author = %d AND recipient = %d', $author_id, $user->uid))) {
       $output = l(t('Unblock author'), 'messages/block/'. $author_id, array('query' => 'destination=messages/view/' . $thread));
