Определение доступности страницы сайта на битриксе для текущего пользователя

Как определить имеет ли текущий пользователь доступ к определенной странице (или разделу) сайта на битриксе? Может ли просматривать содержимое этой страницы? Оказалось, что ответить на этот вопрос не так уж просто. Методы для работы со структурой сайта очень плохо освещены в документации битрикса.

Возможно, вы никогда не озадачитесь этим вопросом, поскольку такая задача возникает перед разработчиками не часто. Но, если все-таки случилось и, как и в моем случае, полчаса гугления не дали результата, то не расстраивайтесь - решение есть ниже.

Итак, задача. Нам известен путь до статической страницы относительно корня сайта. Необходимо определить, может ли текущий пользователь просматривать эту страницу.

Сразу начну с ответа на поставленный вопрос. Не буду описывать долгий и изнуряющий процесс поиска ответа. Скажу лишь, что решение подсказал файл /bitrix/modules/main/include.php, который крепкий орешек закодирован и расколоть раскодировать его было не просто. Вобщем, как оказалось, существует недокументированный метод в битриксе CUser::CanDoFileOperation, с помощью которого поставленная задача решается очень просто:

global $USER;
$sectionPath = '/exemple/section/index.php';
if ($USER->CanDoFileOperation('fm_view_file', array(SITE_ID, $sectionPath))) {
    // Пользователь может просматривать страницу /exemple/section/index.php
} else {
    // Страница /exemple/section/index.php не доступна для 
    // просмотра текущему пользователю
}