diff --git a/includes/features.user.inc b/includes/features.user.inc index 152c5a8..f71ce99 100644 --- a/includes/features.user.inc +++ b/includes/features.user.inc @@ -26,6 +26,9 @@ function user_features_api() { function user_permission_features_export($data, &$export, $module_name = '') { $export['dependencies']['features'] = 'features'; + // Retrieve previously featurized permissions to avoid doubles. + $featurized = features_get_default_map('user_permission'); + // Ensure the modules that provide the given permissions are included as dependencies. $map = user_permission_get_modules(); foreach ($data as $perm) { @@ -34,9 +37,21 @@ function user_permission_features_export($data, &$export, $module_name = '') { // vocabulary id. _user_features_change_term_permission($perm_name, 'machine_name'); if (isset($map[$perm_name])) { - $perm_module = $map[$perm_name]; - $export['dependencies'][$perm_module] = $perm_module; - $export['features']['user_permission'][$perm] = $perm; + // If this permission is already provided by another module, remove the permission + // and add the other module as a dependency. + if (isset($featurized[$perm_name]) && $featurized[$perm_name] != $module_name) { + if (isset($export['features']['user_permission'][$perm_name])) { + unset($export['features']['user_permission'][$perm_name]); + } + $module = $featurized[$perm_name]; + $export['dependencies'][$module] = $module; + } + // If the permission has not yet been exported, add it + else { + $perm_module = $map[$perm_name]; + $export['dependencies'][$perm_module] = $perm_module; + $export['features']['user_permission'][$perm] = $perm; + } } }