Index: spam/spam.module
===================================================================
--- spam/spam.module	(revision 6754)
+++ spam/spam.module	(working copy)
@@ -451,20 +451,20 @@
   $items['admin/content/spam'] = array(
     'title' => 'Spam',
     'page callback' => 'spam_admin_list',
-    'access arguments' => array('administer spam'),
+    'access callback' => 'spam_admin_content',
     'description' => 'Manage spam on your website.'
   );
   $items['admin/content/spam/list'] = array(
     'title' => 'list',
     'type' => MENU_DEFAULT_LOCAL_TASK,
     'page callback' => 'spam_admin_list',
-    'access arguments' => array('administer spam'),
+    'access callback' => 'spam_admin_content',
   );
   $items['admin/content/spam/feedback'] = array(
     'title' => 'feedback',
     'type' => MENU_LOCAL_TASK,
     'page callback' => 'spam_admin_list_feedback',
-    'access arguments' => array('administer spam'),
+    'access callback' => 'spam_admin_content',
     'weight' => 2,
   );
   $items['admin/settings/spam'] = array(
@@ -531,33 +531,33 @@
     'page arguments' => array(1, 2, array('redirect' => TRUE)),
     'load arguments' => array(2, 3),
     'type' => MENU_CALLBACK,
-    'access arguments' => array('administer spam'),
+    'access callback' => 'spam_admin_content',
   );
   $items['spam/%spam_mark/%/not_spam'] = array(
     'page callback' => 'spam_mark_as_not_spam_callback',
     'page arguments' => array(1, 2, array('redirect' => TRUE)),
     'load arguments' => array(2, 3),
     'type' => MENU_CALLBACK,
-    'access arguments' => array('administer spam'),
+    'access callback' => 'spam_admin_content',
   );
   $items["admin/reports/spam/%spam_number/detail"] = array(
-    'access arguments' => array('administer spam'),
     'page callback' => 'spam_logs_entry',
     'page arguments' => array(3),
     'type' => MENU_CALLBACK,
+    'access callback' => 'spam_admin_content',
   );
   $items["admin/reports/spam/%spam_number/trace"] = array(
-    'access arguments' => array('administer spam'),
     'page callback' => 'spam_logs_trace',
     'page arguments' => array(3),
     'type' => MENU_CALLBACK,
+    'access callback' => 'spam_admin_content',
   );
   $items["admin/content/spam/feedback/%spam_number"] = array(
     'title' => 'View feedback',
     'type' => MENU_CALLBACK,
     'page callback' => 'drupal_get_form',
     'page arguments' => array('spam_admin_feedback_form', 4),
-    'access arguments' => array('administer spam'),
+    'access callback' => 'spam_admin_content',
     'weight' => 2,
   );
 
@@ -565,6 +565,13 @@
 }
 
 /**
+ * Check whether user has access to the spam content lists.
+ */
+function spam_admin_content() {
+  return user_access('administer spam') || user_access('mark content as spam');
+}
+
+/**
  * Wildcard loader function.
  */
 function spam_hash_load($hash1, $hash2) {
@@ -635,7 +642,7 @@
  * Drupal _perm hook.
  */
 function spam_perm() {
-  return array('administer spam', 'bypass filters');
+  return array('administer spam', 'bypass filters', 'mark content as spam');
 }
 
 /**
@@ -1694,7 +1701,7 @@
 function spam_links($type, $id, $content) {
   $links = array();
   if (spam_invoke_module($type, 'filter_content_type', $content)) {
-    if (user_access('administer spam')) {
+    if (user_access('administer spam') || user_access('mark content as spam')) {
       $score = (int)db_result(db_query("SELECT score FROM {spam_tracker} WHERE content_type = '%s' AND content_id = '%s'", $type, $id));
 
       if ($score >= variable_get('spam_threshold', SPAM_DEFAULT_THRESHOLD)) {
Index: spam/content/spam_content_user.inc
===================================================================
--- spam/content/spam_content_user.inc	(revision 6754)
+++ spam/content/spam_content_user.inc	(working copy)
@@ -20,7 +20,7 @@
       return spam_content_delete($user, 'user');
     case 'view':
       $links = '';
-      if (user_spamapi('filter_content_type', $user) && user_access('administer spam')) {
+      if (user_spamapi('filter_content_type', $user) && (user_access('administer spam') || user_access('mark content as spam'))) {
         foreach (spam_links('user', $user->uid, $user) as $link) {
           if ($link['href']) {
             $links .= l($link['title'], $link['href'], array('query' => array_merge($link['query'], array('destination' => 'user/'. $user->uid)))) .' ';
Index: spam/content/spam_content_comment.inc
===================================================================
--- spam/content/spam_content_comment.inc	(revision 6754)
+++ spam/content/spam_content_comment.inc	(working copy)
@@ -198,7 +198,7 @@
       $items['admin/content/comment/list/spam'] = array(
         'title' => t('Spam'),
         'page callback' => 'spam_content_comment_admin',
-        'access arguments' => array('administer spam'),
+        'access callback' => 'spam_admin_content',
         //TODO: remove dependencies on comment.admin.inc?
         'file' => 'comment.admin.inc',
         'file path' => drupal_get_path('module', 'comment'),
