Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function MYMODULE_menu_alter(&$items) {
foreach ($items as $key => &$item) {
array_unshift($item['access arguments'], $item['access callback']);
$item['access callback'] = 'MYMODULE_access_callback';
}
}
function MYMODULE_access_callback() {
$args = func_get_args();
$callback = array_shift($args);
$core_access = call_user_func_array($callback, $callback_args);
$my_access = some_my_function_access(); // Функция, которая проверит ваши права доступа
return $core_access && $my_access;
}
$core_access = call_user_func_array($callback, $callback_args);
access arguments и access callback, их типы. Вот с указателем &$item действительно гораздо красивее :)MYMODULE_access_callback() сразу сделать:$core_access = call_user_func_array($callback, $callback_args);
if (!call_user_func_array($callback, $callback_args)) {
return FALSE;
}
MYMODULE_menu_alter устанавливаю стандартный user_access, если коллбэка нет./**
* Implementation of hook_menu_alter().
*/
function module_menu_alter(&$items) {
variable_set('module_next_access_for_script_view', $items['node/%node']['access callback']);
variable_set('module_next_access_for_script_update', $items['node/%node/edit']['access callback']);
variable_set('module_next_access_for_script_delete', $items['node/%node/delete']['access callback']);
$items['node/%node']['access callback'] = 'module_script_access';
$items['node/%node/edit']['access callback'] = 'module_script_access';
$items['node/%node/delete']['access callback'] = 'module_script_access';
}
/**
* Custom access for node/%node page.
*/
function module_script_access($op, $node, $account = NULL) {
//тут решаем давать ли доступ, а потом
$node_access_function = variable_get('module_next_access_for_script_' . $op, 'node_access');
return $node_access_function($op, $node, $account);
}
Переопределение прав доступа в Drupal 6