CRM-11925 - Modify upgradePermissions to work with all permissions (not just single...
authorTim Otten <totten@civicrm.org>
Fri, 8 Mar 2013 08:02:26 +0000 (03:02 -0500)
committerTim Otten <totten@civicrm.org>
Fri, 8 Mar 2013 08:02:26 +0000 (03:02 -0500)
CRM/Core/Config.php
CRM/Core/Permission/Base.php
CRM/Core/Permission/Drupal.php
CRM/Core/Permission/Drupal6.php

index aa45c82ec9d8094d406e9b4ebc004ab9686c7308..668bb7a8b423fe509aa09fe2f08275a6145d605c 100644 (file)
@@ -661,14 +661,9 @@ class CRM_Core_Config extends CRM_Core_Config_Variables {
     $module_files = CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles();
     if ($this->userPermissionClass->isModulePermissionSupported()) {
       // Can store permissions -- so do it!
-      foreach ($module_files as $module_file) {
-        // Consider corner case: Cleaning up old module permissions that have been removed
-        // by unversioned source-code changes.
-        $this->userPermissionClass->upgradePermissions(
-          $module_file['prefix'],
-          $this->userPermissionClass->getModulePermissions($module_file['prefix'])
-        );
-      }
+      $this->userPermissionClass->upgradePermissions(
+        CRM_Core_Permission::basicPermissions()
+      );
     } else {
       // Cannot store permissions -- warn if any modules require them
       $modules_with_perms = array();
index d53e3dfaf859fac242a2da9bf0656fd593d5788b..653ae99323d5ff021501e008f9ad90818971cf0d 100644 (file)
@@ -171,16 +171,15 @@ class CRM_Core_Permission_Base {
   }
 
   /**
-   * Ensure that all cached permissions associated with the given module are
-   * actually defined by that module. This is useful during module upgrade
-   * when the newer module version has removed permission that were defined
-   * in the older version.
+   * Ensure that the CMS supports all the permissions defined by CiviCRM
+   * and its extensions. If there are stale permissions, they should be
+   * deleted. This is useful during module upgrade when the newer module
+   * version has removed permission that were defined in the older version.
    *
-   * @param string $module short-name
-   * @param array $modulePermissions same format as CRM_Core_Permission::getCorePermissions().
+   * @param array $permissions same format as CRM_Core_Permission::getCorePermissions().
    * @see CRM_Core_Permission::getCorePermissions
    */
-  function upgradePermissions($module, $modulePermissions) {
+  function upgradePermissions($permissions) {
     throw new CRM_Core_Exception("Unimplemented method: CRM_Core_Permission_*::upgradePermissions");
   }
 
index 552c9acbcaf78b3e09a901e861fa08240d6f2a7f..d091426067c62efc643a115a7c51615304385ec5 100644 (file)
@@ -104,17 +104,13 @@ class CRM_Core_Permission_Drupal extends CRM_Core_Permission_DrupalBase{
   /**
    * {@inheritdoc}
    */
-  function upgradePermissions($module, $module_permissions) {
-    // Construct a delete query to remove permissions for this module.
-    $query = db_delete('role_permission')
-      ->condition('permission', "$module|%", 'LIKE')
-      ->condition('module', 'civicrm');
-    // Only if the module defines any permissions, exempt those from the delete
-    // process. This approach allows us to delete all permissions for the module
-    // even if the hook_civicrm_permisssion() implementation has been removed.
-    if (!empty($module_permissions)) {
-      $query->condition('permission', array_keys($module_permissions), 'NOT IN');
+  function upgradePermissions($permissions) {
+    if (empty($permissions)) {
+      throw new CRM_Core_Exception("Cannot upgrade permissions: permission list missing");
     }
+    $query = db_delete('role_permission')
+      ->condition('module', 'civicrm')
+      ->condition('permission', array_keys($permissions), 'NOT IN');
     $query->execute();
   }
 }
index 353da32ad0e7aa167f1b70668154b3881d1a77ed..1aaa4adf208603d909e0d2dbc85e1c176ecfae23 100644 (file)
@@ -162,7 +162,7 @@ class CRM_Core_Permission_Drupal6 extends CRM_Core_Permission_DrupalBase {
    *
    * Does nothing in Drupal 6.
    */
-  function upgradePermissions($module, $modulePermissions) {
+  function upgradePermissions($permissions) {
   }
 
   /**