Задача - скрыть отдельные пункты меню (ну и сами материалы, конечно) от некоторых групп пользователей.
Что касается допуска к материалам, все испробованные модули работают добросовестно. Вопрос только в том, что и сами пункты меню не должны быть видны никому, кроме ролей с правами доступа.
Ни в одном из испробованных модулей сделать этого не удается. Доступа к самим материалам нет (Access denied), но пункты меню присутствуют. Может, я и просмотрел решение на Drupal.org (и еще на парочке форумов), тогда буду очень благодарен, если кто-нибудь ткнет меня носом. Единственное предложенное решение - загонять материалы каждый в свой блок, а потом выключать/включать по результатам опроса Show if the following PHP code returns TRUE, не отличается, на мой взгляд, элегантностью.
Испробованные модули: Simple Access, node privacy byrole и taxonomy access. Каждый модуль ставился на свежую установку. Версия Drupal - 4.7.4.
Буду благодарен за любую информацию.
_______________
(Посоветовали Drupal как очень гибкую систему. В целом, особенно после Joomla, производит очень хорошеее впечатление).
Комментарии
Здесь есть кое-какие идеи
http://drupal.org/node/77414
Но нормального решения не попадалось.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Спасибо огромное, Natalie!
Одна из этих идей работает именно так, как нужно. А именно, хак ninetwenty от 26го августа в модуле menu.inc.
Протестировал с версией Drupal 4.7.4 и с модулем node privacy byrole, версии 4.7.0. Использовал 4 пункта в меню, 5 пользователей и 3 роли. Заработало после чистки кэша. Тестировалось локально под виндами на xampp'e. Посмотрю на следующей неделе, как это будет на сервере.
Тест-стадия затянулась, прошу прощения.
Всё замечательно работает и на вебсервере. Могу порекомендовать в качестве стандартного решения.
(Интересно, а в 5ой версии эта "проблема" осталась?..)
2 fu-zsi
Об этом коде речь? :
------------------------------------------------------------------------------------------------------
/**
* Determine whether the given menu item is accessible to the current user.
*
* Use this instead of just checking the "access" property of a menu item
* to properly handle items with fall-through semantics.
*/
function _menu_item_is_accessible($mid) {
$menu = menu_get_menu();
// Follow the path up to find the first "access" attribute.
... фаил нашел, но в произвольном месте (между функциями) не работает
$path = isset($menu['items'][$mid]['path']) ? $menu['items'][$mid]['path'] : NULL;
// ** Begin hack **
if (substr($path, 0, 5) == 'node/') {
$nid = substr($path, 5);
if (is_numeric($nid)) {
$node = node_load($nid);
return node_access('view', $node);
}
}
// ** End hack **
while ($path && (!isset($menu['path index'][$path]) || !isset($menu['items'][$menu['path index'][$path]]['access']))) {
$path = substr($path, 0, strrpos($path, '/'));
}
if (empty($path)) {
// Items without any access attribute up the chain are denied, unless they
// were created by the admin. They most likely point to non-Drupal directories
// or to an external URL and should be allowed.
return $menu['items'][$mid]['type'] & MENU_CREATED_BY_ADMIN;
}
return $menu['items'][$menu['path index'][$path]]['access'];
}
----------------------------------------------------------------------------------
не совсем понял куда именно его надо втиснуть
кривой хак... проверяет только просмотр ноды, зато редактировать дает
Народ как сделать в друпале 5 невидимыми пункты меню или как ограничивать видимостью до определенного уровня вложенности в меню, при этом контент должен быть доступен, очень нужно. Спасибо