You are here

function defaultconfig_component_rebuild_permissions in Default config 7

Provision a set of permissions in a way that won't harm any overrides that has been done. The database always comes before the code. This code is largely based on the code in features, with tweaks to not harm any data that might have been overridden.

See also

user_permission_features_rebuild()

1 string reference to 'defaultconfig_component_rebuild_permissions'
defaultconfig_defaultconfig_components in ./defaultconfig.module
Implements hook_defaultconfig_components().

File

./defaultconfig.module, line 63
main module file.

Code

function defaultconfig_component_rebuild_permissions($info, $default_permissions, $module = FALSE) {
  if (isset($default_permissions) && is_array($default_permissions)) {
    features_include();

    // Make sure we have all permissions by rebuilding filters and rebuild
    // node types.
    node_types_rebuild();
    if (!empty($module)) {
      module_load_include('inc', 'features', 'features.export');
      module_load_include('inc', $module, "{$module}.features.filter");
      filter_features_rebuild($module);
    }
    $roles = _user_features_get_roles();
    $permissions_by_role = _user_features_get_permissions(FALSE);
    foreach ($default_permissions as $permission) {
      $perm = $permission['name'];
      foreach ($roles as $role) {
        if (isset($permission['module']) && module_exists($permission['module']) && in_array($role, $permission['roles'])) {
          $permissions_by_role[$role][$perm] = TRUE;
        }
      }
    }

    // Write the updated permissions.
    foreach ($roles as $rid => $role) {
      if (isset($permissions_by_role[$role])) {
        user_role_change_permissions($rid, $permissions_by_role[$role]);
      }
    }
  }
}