diff --git a/modules/user/user.install b/modules/user/user.install index 2867b97..9d855ea 100644 --- a/modules/user/user.install +++ b/modules/user/user.install @@ -598,13 +598,6 @@ function user_update_7006(&$sandbox) { // Add a new field for the fid. db_add_field('role_permission', 'module', $module_field); } - $permissions = user_permission_get_modules(); - foreach ($permissions as $key => $value) { - db_update('role_permission') - ->fields(array('module' => $value)) - ->condition('permission', $key) - ->execute(); - } } /** diff --git a/modules/user/user.module b/modules/user/user.module index 044ad46..89795ff 100644 --- a/modules/user/user.module +++ b/modules/user/user.module @@ -3931,3 +3931,21 @@ function user_system_info_alter(&$info, $file, $type) { $info['hidden'] = FALSE; } } + +/** + * Implements hook_flush_caches(). + */ +function user_flush_caches() { + // Detect permissions that are not associated with modules, and attempt to + // match them. Since permissions may be dynamic, and hook_flush_caches() can + // be invoked from update.php, ensure this does not run there. + if (!defined('MAINTENANCE_MODE') && (bool) db_query_range('SELECT 1 FROM {role_permission} WHERE module = :empty', 0, 1, array(':empty' => ''))->fetchField()) { + $permissions = user_permission_get_modules(); + foreach ($permissions as $key => $value) { + db_update('role_permission') + ->fields(array('module' => $value)) + ->condition('permission', $key) + ->execute(); + } + } +}