Вы здесь

Как заблокировать доступ анонимам для страницы node/add, если им разрешено создавать материал?

0

Привет!
Как можно заблокировать доступ анонимам для страницы node/add, если им разрешено создавать материал?
Разрешил анонимным пользователям создавать материалы. Для создания материалов создал необходимые ссылки с необходимыми параметрами. Хочу прикрыть доступ анонимам для страницы создания материала (node/add), чтобы пользователь не видел какие материалы он может создавать, тем более без соответствующих параметров в URL, материал создавать не будет (выдает ошибку), так как использую в материалах Entityreference prepopulate.
Заблокировать доступ хочу редиректом на главную страницу.

Версия Drupal: 
7.x
Вопрос задан 22.12.2016 - 10:17
Аватар пользователя pr0g
pr0g
36

Ответы

1

Попробуйте сделать так.

Определите для пути node/add в своем модуле hook_menu_alter.

В нем напишите новую функцию для access callback, где в случае истинности функции user_is_anonymous() будет запрещаться доступ.

function MYMODULE_menu_alter(&$items){
  $items[node/add']['access callback'] = 'MYMODULE_custom_callback'; 
}

function MYMODULE_custom_callback(){ 
  return (_node_add_access() && !user_is_anonymous());
}

_node_add_access() - это функция проверки доступа по умолчанию

P.S. Если нужен именно редирект на главную страницу, а не закрытие доступа, можно сделать таким образом

function MYMODULE_menu_alter(&$items){
  $items[node/add']['page callback'] = 'MYMODULE_redirect_to_front'; 
}

function MYMODULE_redirect_to_front(){ 
if (user_is_anonymous())
  drupal_goto('<front>');
else
  node_add_page();  
}
Ответ дан 22.12.2016 - 12:14

Ваш код можно использовать через template.php или обязательно надо оформлять через модуль?

Комментарий оставлен 25.12.2016 - 00:52

Насколько я знаю, hook_menu_alter определяется через модуль.

Комментарий оставлен 25.12.2016 - 15:46

Для анонимных пользователей ваш второй пример с редиректом работает, а вот для авторизованных пользователей выдает белую страницу.

Комментарий оставлен 26.12.2016 - 19:10
1
Ответ дан 22.12.2016 - 12:43
Аватар пользователя shu
shu
178

Взял по ссылке второй пример, добавил проверку анонимный ли пользователь. В итоге: Доступ к странице добавление материала закрыт как анонимному пользователю так и авторизованному. Почему так произошло? Хук писал в файл template.php, возможно из-за этого?

/**
 * Implements hook_menu_alter().
 */
function anketa_menu_alter(&$items) {
  if (user_is_anonymous()) {
    $items['node/add']['page callback'] = 'drupal_goto';
    $items['node/add']['page arguments'] = array('<front>');
  }
}
Комментарий оставлен 25.12.2016 - 00:37