Drupal 6: Restrict sections of a form to certain users and roles

At some point you might want to restrict sections of a form to certain users and roles. That can be accomplished relatively easy by creating a module that implements 2 Drupal hooks: hook_form_alter and hook_perm.

First I start by adding the hook_perm():

<?php
function MYMODULE_perm() {
  // return an array of permissions,
  // they can be named whatever you'd like.
  // NOTE: avoid redeclaring permissions that are already set
  return array('access secret section of my form');
}
?>

Next add a form_alter hook:

<?php
function MYMODULE_form_alter(&$form, $form_state, $form_id) {

  // test for the form id you'd like to alter.
  // if you are unsure of the it's exact name,
  // you could add this: echo $form_id . "<BR>";
  if ($form_id =='SOME_FORM_ID') {
    // check if the user has access to the permission you defined
    if (!user_access('access secret section of my form')) {
      // deny access to the form element
      // if you don't what what it's called,
      // output the $form object:
      // echo "<pre>" . print_r($form, true) . "</pre>";
      $form['SOME_FORM_ELEMENT']['#access'] = false;
    }
  }
}
?>

Now if you enable you module you can restrict permissions by going here: /admin/user/permissions

Updated: