Выборочный ответ обратного вызова доступа пользователя Drupal - PullRequest
1 голос
/ 02 декабря 2011

Пожалуйста, будьте терпеливы с этим новичком в Drupal API, пока я объясню некоторые базовые вещи!

Я экспериментировал с приведенным ниже кодом, чтобы создать 2 отдельных ответа, когда мои пользователи нажимают на ссылку создания пользовательского узла. По умолчанию открывается страница, которая позволяет пользователям выполнять обычные шаги по созданию узла. Мой модуль проверяет, есть ли у пользователя определенные разрешения, и либо позволяет ему продолжить создание узла, либо выдает страницу с отказом в доступе.

function mymodule_menu_alter(&$items) {  
  $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback';
}

function mymodule_access_callback(){
  if( user_access('open sesame') ){
    drupal_set_message("successfully intecepting new node creation");
    return true;
  }
  return false;
}

Узел / добавить / страницу успешно заблокирован, но это происходит в обоих случаях. Оператор if определяет, имеет ли пользователь определенное разрешение, и в него я добавил возвращаемое значение true, что привело к следующей ошибке:

Неустранимая ошибка: require_once () [function.require]: сбой открытия требуется /node.pages.inc '(include_path =' .: ') в /var/www/vhosts/mysite.co.uk/httpdocs/includes/menu.inc в строке 347

Как новичок, я не уверен, что мне нужно делать, чтобы избежать отказа в доступе для нужных пользователей.

1 Ответ

0 голосов
/ 02 декабря 2011

Попробуйте это:

function mymodule_menu_alter(&$items) {  
  $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback';
  $items["node/add/page/%"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc';
}

РЕДАКТИРОВАТЬ

Попробуйте изменить вторую строку выше на это:

$items["node/add/page"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc';

Это попыткаявно укажите путь к файлу для родительского элемента определяемого вами пути.

Также это может быть глупо, но каждый раз, когда вы вносите изменение в hook_menu_alter(), убедитесь, что вы очищаете кеши Drupal, так чтоизменения подобраны.

...