Делаю на Drupal сайт локальной сети. Существует меню с ссылками на внутренние ресурсы, но поскольку сайт будет смотреть и в интернет, можно ли сделать чтобы эти ссылки были некликабельными для пользователей извне? Как это правильно реализовать, подскажите пожалуйста. Или рассмотрю другие варианты...
Комментарии
А материалы со ссылками будут доступны обоим группам пользователей?
структура такая
- Сервисы - ссылка на страницу с описанием сервисов и с прямыми ссылками на сервисы
-- форум - прямая ссылка
-- трэкер - прямая ссылка
-- файловый сервер - прямая ссылка
-- и т.п. - прямая ссылка
Т.е. при клике на Сервисы открывается подменю с прямыми ссылками, а также страница с полным описанием данных сервисов и ссылками на них.
Регистрация закрыта, уже присутствует база данных пользователей, которая пополняется при подключении нового пользователи в сеть. Т.е. групп пользователей две по умолчанию, те которые в сети, и те которых в сети нет.
На ум приходит может и не самая удачная идея, но работать будет.
Размещаете ссылки на местные ресурсы через анализ $_SERVER["REMOTE_ADDR"]. Если первые 8 цифр типа 192.168. - ссылка кликабельна. Нет - пишете что-то типа "внутренняя ссылка". Тип контента при этом надо задавать как php.
Лично я бы попробовал реализовать с помощью мультисайтинга.... Только как практически, не знаю
Т.е. средствами друпала запретить незарегистрированным пользователям видеть ссылки нет? а если использовать страницу error 404? будет ли посетитель извне видеть эту 404 страницу?
Варианты:
1) Все ссылки на внутренние ресурсы вынести в одно меню и в настройках блока меню указать какой роли виден блок. Через поиск эти ссылки всё равно найдутся кстати.
2) Использовать модуль nodeaccess или аналогичный для закрытия доступа к внутренним страницам. При это ссылки в меню будут присутствовать, но при клике будет выводится страница с сообщением о том, что доступа-то нет.
3) Если надо, чтобы ссылок ваще не было или ссылки не были ссылками (просто текст) - то модуль свой писать или блок с php-кодом навоять, где проверять роль юзера.
Узнавать роль юзера - лишняя трата ресурсов. У него вся локалка зарегистрирована, значит вполне можно фильтровать по адресам. Зачем мучить БД лишними запросами, если результат будет тот же самый? А если юзер зарегистрированный, но войдет как аноним?
$_SERVER["REMOTE_ADDR"] значительно удобнее для его случая.
4) http://drupal.org/project/menu_per_role
поставил menu_per_role - не подходит определенно. Он закрывает меню вообще. Попробую еще варианты. Получится - отпишусь
Узнавать роль юзера - лишняя трата ресурсов. У него вся локалка зарегистрирована, значит вполне можно фильтровать по адресам. Зачем мучить БД лишними запросами, если результат будет тот же самый?
Информация о юзере всё равно загружается, включая роли, потому что нужно проверять права на всё.
Условие на проверку зареген ли юзер: if ($GLOBALS['user']->roles[2]) ....
А он не зареган в данный момент. Мы точно знаем, что он валидный, но сейчас он вошел, по ошибке, без пароля. Итого получили лишнюю нагрузку на сервер, верно?
Мелочь, конечно, но %10 - 20% таких запросов может быть.
поставил menu_per_role - не подходит определенно. Он закрывает меню вообще. Попробую еще варианты. Получится - отпишусь
"Вообще" закрывать меню через настройки блока - это встроенная функция Drupal. А menu_per_role ща попробовал - у меня не пашет, доступ не закрывается.
Пропатчить нужно includes/menu.inc ... будет работать
а нужно именно закрытие ссылок или закрытие разделов сайта? Почему бы не taxonomy access и OG - это взависимости от структуры сайта...
отлично сработала тема с проверкой на зареген юзер или нет, но только в случае обычного PHP формата в странице. Как сделать такую же штуку для меню пока для меня секрет.
Я работаю с Drupal всего 24 часа - для меня еще не очень понятен принцип taxonomy, так что если можно поподробнее про taxonomy access и OG Спасибо заранее
Глючноватый модуль или это фича такая... Похоже когда ставишь первый раз настройки для 1 пункта меню - он ставит эти настройки всем пунктам. Я прошелся по другим пунктам и выставил настройки - вроде заработало..
Можно сделать блок с php-кодом, который будет выводить дерево меню. Стандартное меню выводится функцией theme_menu_tree (http://api.drupal.org/api/function/theme_menu_tree/5).
О ! вот это хороший пример Спасибо !)
но пока возился с этими всеми делами директора все передумали и решили делать два сайта - один внутренний со статистикой и всеми делами, и второй морду в инет... Короче полдня убил зря но все равно всем спасибо за помощь
$GLOBALS['user']->roles[2] - где тут нагрузка-то?)
Да не залогин он! Имеет доступ, а не залогин. Что он сделает? Единственно возможное - страничку перегрузит уже под своим логином. Вот и нагрузочка.