From faede90168b39f8f88ec54d8a14e20f89c2d7ebe Wed, 4 May 2011 10:06:56 -0700
From: Geoff Appleby <geoff@fraek.ca>
Date: Wed, 4 May 2011 10:06:18 -0700
Subject: [PATCH] Allow other modules to specify special roles which cannot be optimized away.

diff --git a/content_access.module b/content_access.module
index 97c6f80..a12607d 100644
--- a/content_access.module
+++ b/content_access.module
@@ -453,6 +453,8 @@
   }
   // Detect if all are allowed to view
   $all = array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID);
+  $all = array_merge($all, module_invoke_all('content_access_special_roles'));
+
   if (count(array_diff($all, $rids['view'])) == 0) {
     //grant view access to all instead of single roles
     $rids['view'] = array('all');
@@ -461,7 +463,13 @@
   // If authenticated users are involved, remove unnecessary other roles.
   foreach (array('view', 'update', 'delete') as $op) {
     if (in_array(DRUPAL_AUTHENTICATED_RID, $rids[$op])) {
-      $rids[$op] = in_array(DRUPAL_ANONYMOUS_RID, $rids[$op]) ? array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID) : array(DRUPAL_AUTHENTICATED_RID);
+      $temp_rids = array();
+      foreach ($all as $role) {
+        if (in_array($role, $rids[$op])) {
+          $temp_rids[] = $role;
+        }
+      }
+      $rids[$op] = $temp_rids;
     }
   }
 
