Привет!
Как можно заблокировать доступ анонимам для страницы node/add, если им разрешено создавать материал?
Разрешил анонимным пользователям создавать материалы. Для создания материалов создал необходимые ссылки с необходимыми параметрами. Хочу прикрыть доступ анонимам для страницы создания материала (node/add), чтобы пользователь не видел какие материалы он может создавать, тем более без соответствующих параметров в URL, материал создавать не будет (выдает ошибку), так как использую в материалах Entityreference prepopulate.
Заблокировать доступ хочу редиректом на главную страницу.
Ответы
Попробуйте сделать так.
Определите для пути 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();
}
Взял по ссылке второй пример, добавил проверку анонимный ли пользователь. В итоге: Доступ к странице добавление материала закрыт как анонимному пользователю так и авторизованному. Почему так произошло? Хук писал в файл 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>');
}
}
Ваш код можно использовать через template.php или обязательно надо оформлять через модуль?
Насколько я знаю, hook_menu_alter определяется через модуль.
Для анонимных пользователей ваш второй пример с редиректом работает, а вот для авторизованных пользователей выдает белую страницу.