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():

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

Next add a form_alter hook:

<?phpfunctionMYMODULE_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 definedif(!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