Дек
04
2010

Программно запрещаем доступ к некоторым страницам в админке drupal

Покажу на таком примере: какая-то информация на сайте организована через таксономию. Владельцу сайта нужно иметь доступ к изменению списка терминов, но при этом видеть непонятное ему «таксономия», а внутри «добавить словарь» – ему не надо.

Выносим пункт на листинг терминов словаря в менюшку. А в своём модуле прописываем:

Мой модуль, в котором я это писал назывался atlant, поэтому и в названиях функций фигурирует это название. Вам стоит заменить его на название своего модуля.


/**
 * hook_perm()
 * @return 
 */
function atlant_perm() {
  $perms = array('access to hidden pages');

  return $perms;
}

/**
 * hook_menu_alter()
 * @param  $items
 */
function atlant_menu_alter(&$items) {
  $items['admin/content/taxonomy']['access arguments'] = array('access to hidden pages');
  $items['admin/content/taxonomy/add/vocabulary']['access arguments'] = array('access to hidden pages');
  $items['admin/content/taxonomy/edit/vocabulary/%taxonomy_vocabulary']['access arguments'] = array('access to hidden pages');
}

Ну и заодно чтобы разрешить изменять лишь название термина таксономии, и не показывать поля для описания и прочего, пишем:


/**
 * Форма редактирования термина
 * @param  $form
 * @param  $form_state
 */
function atlant_form_taxonomy_form_term_alter(&$form, &$form_state) {
  $form['identification']['description']['#access'] = false;
  $form['advanced']['#access'] = false;
  //var_dump($form); die;
}

Leave Your Comment