Иногда бывает необходимость закрыть доступ к определенной страницей верхним уровнем прав - то есть до исполнения контентной части страницы. И доступа к самой странице у вас нет. Например, это корпортал, и надо закрыть выборочно доступ к некоторым сотрудникам.
Что делать? Как правильно? Вот простой обработчик:
AddEventHandler('main', 'OnBeforeProlog', 'OnBeforeProlog');
function OnBeforeProlog()
{
$page = $GLOBALS['APPLICATION']->getCurPage();
//доступ к карточке юзера
if (preg_match('#'.SITE_DIR.'company/personal/user/([\d]+)/#i', $page, $matches)) {
if ($GLOBALS['USER']->getId() != $matches[1]) {
//пересечения по департаментам отсутствуют
$commonDeps = array_intersect(getAllowedDepartments($matches[1], true), getAllowedDepartments(false, true));
if (empty($commonDeps)) {
$GLOBALS['APPLICATION']->AuthForm(array('MESSAGE' => 'Доступ к странице запрещен', 'TYPE' => 'ERROR'));
}
}
}
} |
Вы уже догадались, что ключевое тут $GLOBALS['APPLICATION']->AuthForm.
Получим полноценную авторизацию, при которой недоступен даже заголовок страницы. Это полностью по правилам продукта, ибо, если заглянем в /bitrix/modules/include.php в самый конец, увидим там аналогичную проверку на доступ:
То бишь, мы просто эмулируем такую вот проверку самостоятельно.