2010-11-09 4 views

ответ

1

Это то, что боли в Drupal 6 - hook_access может только настроить доступ по типам узлов, созданных с помощью модуля это часть, и hook_node_access нового в Drupal 7.

К сожалению, лучшее решение, которое я нашел для этого, - это базовый патч, который добавляет access op к hook_nodeapi. Детали можно найти here.

+1

Не поклонник исправления ядра. Идти, чтобы сделать какое-то серьезное мышление. – Will

+0

Да, я тоже не поклонник этого. D7, наконец, исправляет это ** вопиющее ** упущение. – ceejayoz

+0

Возможно, это не самая лучшая практика, но я могу использовать hook_view и возвращать что-то еще, если они не соответствуют моим условиям? – Will

5

Все, что вам нужно, это hook_access

Если вы хотите сделать контроль доступа на всех узлах, это может быть сделано с немного тонкой настройки. Вы можете использовать hook_menu_alter, чтобы добавить свою настраиваемую функцию контроля доступа в узел/узел узла. Это может выглядеть следующим образом:

function module_menu_alter($items) { 
    $items['node/%node']['access callback'] = 'module_node_access'; 
} 

function module_node_access($op, $node) { 
    if ($special_case) { 
    return FALSE; 
    } 
    elseif ($special_case_2) { 
    return TRUE; 
    } 
    // Default, let Drupal handle it. 
    return return node_access($op, $node); 
} 
+0

Nope. «Этот крючок позволяет узловым модулям ограничивать доступ к указанным типам узлов». Если вы пытаетесь настроить доступ к, например, типу узла CCK, 'hook_access' не будет работать в вашем настраиваемом модуле, так как ваш пользовательский модуль не определил тип узла. – ceejayoz

+0

Неудивительно, что это не сработало, когда я попытался. – Will

+0

Да, я потратил целый день, пытаясь заставить это работать, пока не наткнулся на объяснение причин, почему это не работает. Вы подумали бы, что это будет более заметно объяснено на этой странице документации ... – ceejayoz