Добрый день!
У меня вопрос по access_arguments в хуке hook_menu.
Необходимо, чтобы ссылка меню и страница, созданные хуком показывались авторизованному пользователю.
Ставлю
'access arguments' => array('administer site configuration'),
даю авторизованному пользователю соответствующее разрешение, однако ссылка и страница не показываются.
Спасибо!
Комментарии
Проблема решилась установкой
'access arguments' => array('administer nodes'),
и установкой разрешения Administer content.
Допустимо ли это?
И почему разрешения в хуке и в таблице не совпадают?
'administer nodes' дают не просто авторизованным пользователям, а вообще админам контента. ваша страница только для админов?
Нет, как раз страница должна быть для авторизованного пользователя, ну и для админа, соответственно. А неавторизованному она не видна.
Я вот тут не проследил, какая связь между аргументами доступа хука и разрешениями ролей. Не проясните?
Ну, хорошо.
1. Есть права, уже предоставленный ядром и модулями и любые какие вы придумаете с помощью hook_permission. Пример права: Просмотр опубликованных материалов (access content), Управление конфигурацией сайта (administer site configuration) и любое другое.
2. Есть роли пользователей. Например, неавторизованный пользователь, авторизованный, контент-менеджер, админ.
3. Есть связь роль ←→ права. У каждой роли свой набор прав. Настраивается это по адресу /admin/people/permissions
4. Когда друпал собирается совершить какое-то действие, он предпочитает проверить разрешение на это действие с помощью кода
if (user_access(<код права>)) {
. Вернет TRUE, если какая-нибудь из ролей текущего пользователя обладает правом <код права>.5. В hook_menu есть 2 параметра. 'access callback' (по умолчанию user_access) и 'access arguments' (массив, передающийся в access callback).
Если вам просто нужно проверить, что пользователь авторизован, то вы можете не использовать систему прав, а просто задать
'access callback' => 'user_is_logged_in'
.Огромное спасибо за столь распространенное объяснение. До сего момента я чего-то более-менее толкового не встречал.
Картина, вроде как, выстроилась.
А вот этот <код права> должен соответствовать разрешению из /admin/people/permissions? По какому принципу?
А это уже вам задание на самостоятельное изучение.
)))
И на том огромное спасибо!