diff options
Diffstat (limited to 'modules/user/user.admin.inc')
-rw-r--r-- | modules/user/user.admin.inc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/modules/user/user.admin.inc b/modules/user/user.admin.inc index b53f9b927..303d2ff0a 100644 --- a/modules/user/user.admin.inc +++ b/modules/user/user.admin.inc @@ -251,6 +251,26 @@ function user_admin_settings() { '#required' => TRUE, ); + // Administrative role option. + $form['admin_role'] = array( + '#type' => 'fieldset', + '#title' => t ('Administrator role'), + ); + + // Don't allow users to set the anonymous or authenticated user roles as the + // administrator role. + $roles = user_roles(); + $roles = array_slice($roles, 2, NULL, TRUE); + $roles[0] = t('disabled'); + + $form['admin_role']['user_admin_role'] = array( + '#type' => 'select', + '#title' => t('Administrator role'), + '#default_value' => variable_get('user_admin_role', 0), + '#options' => $roles, + '#description' => t('This role will be automatically assigned new permissions whenever a module is enabled. Changing this setting will not affect existing permissions.'), + ); + // User registration settings. $form['registration_cancellation'] = array( '#type' => 'fieldset', @@ -910,3 +930,24 @@ function theme_user_filters($form) { return $output; } + +/** + * Implementation of hook_modules_installed(). + */ +function user_modules_installed($modules) { + // Assign all available permissions to the administrator role. + $rid = variable_get('user_admin_role', 0); + if ($rid) { + foreach ($modules as $module) { + if ($permissions = module_invoke($module, 'perm')) { + foreach (array_keys($permissions) as $permission) { + db_insert('role_permission') + ->fields(array( + 'rid' => $rid, + 'permission' => $permission, + ))->execute(); + } + } + } + } +} |