function user_admin_permissions

Menu callback: administer permissions.

See also

user_admin_permissions_submit()

theme_user_admin_permissions()

Related topics

1 string reference to 'user_admin_permissions'
user_menu in modules/user/user.module
Implements hook_menu().

File

modules/user/user.admin.inc, line 689

Code

function user_admin_permissions($form, $form_state, $rid = NULL) {
    // Retrieve role names for columns.
    $role_names = user_roles();
    if (is_numeric($rid)) {
        $role_names = array(
            $rid => $role_names[$rid],
        );
    }
    // Fetch permissions for all roles or the one selected role.
    $role_permissions = user_role_permissions($role_names);
    // Store $role_names for use when saving the data.
    $form['role_names'] = array(
        '#type' => 'value',
        '#value' => $role_names,
    );
    // Render role/permission overview:
    $options = array();
    $module_info = system_get_info('module');
    $hide_descriptions = system_admin_compact_mode();
    // Get a list of all the modules implementing a hook_permission() and sort by
    // display name.
    $modules = array();
    foreach (module_implements('permission') as $module) {
        $modules[$module] = $module_info[$module]['name'];
    }
    asort($modules);
    foreach ($modules as $module => $display_name) {
        if ($permissions = module_invoke($module, 'permission')) {
            $form['permission'][] = array(
                '#markup' => $module_info[$module]['name'],
                '#id' => $module,
            );
            foreach ($permissions as $perm => $perm_item) {
                // Fill in default values for the permission.
                $perm_item += array(
                    'description' => '',
                    'restrict access' => FALSE,
                    'warning' => !empty($perm_item['restrict access']) ? t('Warning: Give to trusted roles only; this permission has security implications.') : '',
                );
                $options[$perm] = '';
                $form['permission'][$perm] = array(
                    '#type' => 'item',
                    '#markup' => $perm_item['title'],
                    '#description' => theme('user_permission_description', array(
                        'permission_item' => $perm_item,
                        'hide' => $hide_descriptions,
                    )),
                );
                foreach ($role_names as $rid => $name) {
                    // Builds arrays for checked boxes for each role
                    if (isset($role_permissions[$rid][$perm])) {
                        $status[$rid][] = $perm;
                    }
                }
            }
        }
    }
    // Have to build checkboxes here after checkbox arrays are built
    foreach ($role_names as $rid => $name) {
        $form['checkboxes'][$rid] = array(
            '#type' => 'checkboxes',
            '#options' => $options,
            '#default_value' => isset($status[$rid]) ? $status[$rid] : array(),
            '#attributes' => array(
                'class' => array(
                    'rid-' . $rid,
                ),
            ),
        );
        $form['role_names'][$rid] = array(
            '#markup' => check_plain($name),
            '#tree' => TRUE,
        );
    }
    $form['actions'] = array(
        '#type' => 'actions',
    );
    $form['actions']['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Save permissions'),
    );
    $form['#attached']['js'][] = drupal_get_path('module', 'user') . '/user.permissions.js';
    return $form;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.