2011-01-14 4 views
0

Я создаю сайт, который дает каждому пользователю частную домашнюю страницу с содержимым, которое они могут видеть, но другие не могут. Обратный вызов в обработчике _menu позволяет получить доступ, если пользователь является владельцем страницы и отрицает это иначе; там все хорошо.Drupal: доступ запрещен, но я получаю контент в любом случае

Я только что переработал эту страницу, чтобы ее содержимое состояло из набора ящиков вместо большого мешка с кодом. Содержимое собралось правильно, но с проблемой: если пользователь A смотрит на личную страницу пользователя B, он получает страницу «Отказано в доступе», как он должен. Тем не менее, блоки все еще вызывают, и их содержимое по-прежнему заканчивается на странице, так что пользователь A может видеть личные вещи пользователя B. На странице также нет обычного «У вас нет доступа к этой странице». сообщение, которое обычно отображается на странице «Отказано в доступе».

У меня полная потеря, чтобы понять, почему это происходит. Я могу блокировать блоки, предоставляя им некоторые правильно спроектированные функции «Показывать блок на определенных страницах», но все же происходит что-то, что (а) не кажется правильным и (б) я не понимаю. Вместе это дает мне плохое/смешное чувство о том, что происходит с контролем доступа для сайта, особенно в том, как оно относится к блокам. Может ли кто-нибудь предложить здесь прозрение? Благодаря!

ответ

0

Вы должны создать функцию обратного вызова доступа в меню вашего крюка, чтобы выполнить проверку доступа. Кроме того, пользователю разрешено просматривать содержимое, даже если вы ничего не визуализируете. Поскольку блоки не создаются с помощью обратного вызова меню, они отображаются в обычном режиме.

Для справки см: hook_menu

+0

Это именно то, что я делаю - запись для страницы в обработчике _menu моего модуля имеет «обратный вызов доступа» _access_canEditUserPage, который пропускается UID пользователя (извлеченный из URL страницы и передается через «аргументы доступа» -> массив (1)). _access_canEditUserPage подтверждает, что пользователю разрешено видеть страницу и возвращает значение true или false, в зависимости. Это (я думаю) - это то, что вызывает страницу «Отказано в доступе», и именно поэтому я смущен тем, что содержимое блока продолжает появляться. FWIW, журналы apache подтверждают, что на запрос страницы отвечает код ошибки 403. –

Смежные вопросы