user_admin_perm

Versions
4.6
user_admin_perm()
4.7
user_admin_perm($str_rids = NULL)
5
user_admin_perm($rid = NULL)
6
user_admin_perm($form_state, $rid = NULL)

Menu callback: administer permissions.

Code

modules/user.module, line 1501

<?php
function user_admin_perm() {
  $edit = $_POST['edit'];
  if ($edit) {
    // Save permissions:
    $result = db_query('SELECT * FROM {role}');
    while ($role = db_fetch_object($result)) {
      // Delete, so if we clear every checkbox we reset that role;
      // otherwise permissions are active and denied everywhere.
      db_query('DELETE FROM {permission} WHERE rid = %d', $role->rid);
      foreach ($edit[$role->rid] as $key => $value) {
        if (!$value) {
          unset($edit[$role->rid][$key]);
        }
      }
      if (count($edit[$role->rid])) {
        db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $role->rid, implode(', ', array_keys($edit[$role->rid])));
      }
    }

    drupal_set_message(t('The changes have been saved.'));

    // Clear the cached pages and menus:
    cache_clear_all();
    menu_rebuild();

    drupal_goto($_GET['q']);
  }

  // Compile role array:
  $result = db_query('SELECT r.rid, p.perm FROM {role} r LEFT JOIN {permission} p ON r.rid = p.rid ORDER BY name');
  $roles = array();
  while ($role = db_fetch_object($result)) {
    $role_permissions[$role->rid] = $role->perm;
  }

  $result = db_query('SELECT rid, name FROM {role} ORDER BY name');
  $role_names = array();
  while ($role = db_fetch_object($result)) {
    $role_names[$role->rid] = $role->name;
  }

  // Render role/permission overview:
  $header = array_merge(array(t('Permission')), $role_names);

  foreach (module_list() as $module) {
    if ($permissions = module_invoke($module, 'perm')) {
      $rows[] = array(array('data' => t('%module module', array('%module' => $module)), 'class' => 'module', 'colspan' => count($role_names) + 1));
      asort($permissions);
      foreach ($permissions as $perm) {
        $row[] = array('data' => t($perm), 'class' => 'permission');
        foreach ($role_names as $rid => $name) {
          $row[] = form_checkbox('', "$rid][$perm", 1, strstr($role_permissions[$rid], $perm));
        }
        $rows[] = $row;
        unset($row);
      }
    }
  }

  $output = theme('table', $header, $rows, array('id' => 'permissions'));
  $output .= form_submit(t('Save permissions'));

  print theme('page', form($output));
}
?>
Login or register to post comments
 
 

All source code and documentation on this site is released under the terms of the GNU General Public License, version 2 and later. Drupal is a registered trademark of Dries Buytaert.