diff -r 39f211f671e1 sites/all/modules/contributions/hierarchical_select/hierarchical_select.module
--- a/sites/all/modules/contributions/hierarchical_select/hierarchical_select.module	Tue Jan 19 14:30:08 2010 +0100
+++ b/sites/all/modules/contributions/hierarchical_select/hierarchical_select.module	Tue Jan 19 15:07:07 2010 +0100
@@ -16,6 +16,13 @@
 // Drupal core hooks.
 
 /**
+ * Implementation of hook_perm().
+ */
+function hierarchical_select_perm() {
+  return array('create new items');
+}
+
+/**
  * Implementation of hook_menu().
  */
 function hierarchical_select_menu() {
@@ -420,7 +427,7 @@
            'animationDelay'   => ($config['animation_delay'] == 0) ? (int) variable_get('hierarchical_select_animation_delay', 400) : $config['animation_delay'],
            'cacheId'          => $config['module'] .'_'. implode('_', (is_array($config['params'])) ? $config['params'] : array()),
            'renderFlatSelect' => (isset($config['render_flat_select'])) ? (int) $config['render_flat_select'] : 0,
-           'createNewItems'   => (isset($config['editability']['status'])) ? (int) $config['editability']['status'] : 0,
+           'createNewItems'   => (isset($config['editability']['status']) && user_access('create new items')) ? (int) $config['editability']['status'] : 0,
            'createNewLevels'  => (isset($config['editability']['allow_new_levels'])) ? (int) $config['editability']['allow_new_levels'] : 0,
            'resizable'        => (isset($config['resizable'])) ? (int) $config['resizable'] : 0,
            'path'             => $config['path'],
@@ -1738,9 +1745,11 @@
   // Prepend a "<create new item>" option to the root level when:
   // - the editability setting is enabled, and
   // - the hook is implemented (this is an optional hook), and
+  // - the current user has access for it, and
   // - the allowed_levels setting allows to create new items at this level.
   if ($config['editability']['status']
       && module_hook($config['module'], 'hierarchical_select_create_item')
+      && user_access('create new items')
       && _hierarchical_select_create_new_item_is_allowed($config, 0)
   ) {
     $item_type = t($config['editability']['item_types'][0]);
@@ -1779,8 +1788,9 @@
     // when:
     // - the editability setting is enabled, and
     // - the hook is implemented (this is an optional hook), and
+    // - the current user has access for it, and
     // - the allowed_levels setting allows to create new items at this level.
-    if ($config['editability']['status'] && module_hook($config['module'], 'hierarchical_select_create_item')) {
+    if ($config['editability']['status'] && module_hook($config['module'], 'hierarchical_select_create_item') && user_access('create new items')) {
       for ($depth = 1; $depth <= $max_depth; $depth++) {
         $item_type = t($config['editability']['item_types'][$depth]);
         $item_type = (!empty($item_type)) ? $item_type : t('item');
@@ -1803,10 +1813,12 @@
       // - this is not the root level (the root level already has this), and
       // - the editability setting is enabled, and
       // - the hook is implemented (this is an optional hook), and
+      // - the current user has access for it, and
       // - the allowed_levels setting allows to create new items at this level.
       if ($depth > 0
           && $config['editability']['status']
           && module_hook($config['module'], 'hierarchical_select_create_item')
+          && user_access('create new items')
           && _hierarchical_select_create_new_item_is_allowed($config, $depth)
       ) {
         $item_type = t($config['editability']['item_types'][$depth]);
@@ -1843,9 +1855,11 @@
         // Prepend a "<create new item>" option to the current level when:
         // - the editability setting is enabled, and
         // - the hook is implemented (this is an optional hook), and
+        // - the current user has access for it, and
         // - the allowed_levels setting allows to create new items at this level.
         if ($config['editability']['status']
             && module_hook($config['module'], 'hierarchical_select_create_item')
+            && user_access('create new items')
             && _hierarchical_select_create_new_item_is_allowed($config, $depth)
         ) {
           $item_type = t($config['editability']['item_types'][$depth]);
@@ -1868,11 +1882,13 @@
   // option, if:
   // - the editability setting is enabled
   // - the allow_new_levels setting is enabled
+  // - the current user has access for it
   // - an additional level is permitted by the max_levels setting
   // - the deepest item of the lineage is a valid item
   // NOTE: this uses an optional hook, so we also check if it's implemented.
   if ($config['editability']['status']
       && $config['editability']['allow_new_levels']
+      && user_access('create new items')
       && ($config['editability']['max_levels'] == 0 || count($hierarchy->lineage) < $config['editability']['max_levels'])
       && module_invoke($config['module'], 'hierarchical_select_valid_item', end($hierarchy->lineage), $config['params'])
       && module_hook($config['module'], 'hierarchical_select_create_item')
