Имеется следующая задача: Есть закрытый сайт от внешних пользователей. На сайте имеется ссылка на прайс в фомате .xls (прайс выгружается в файл автоматически 1с). Файл для скачивания должен быть доступен только авторизованным пользователям, но если указать прямую ссылку на файл, то все-равно осуществляется скачивание файла.

Было следующее обращение в тех поддержку по этому вопросу:
«Есть закрытый для внешнего доступа сайт, к которому имеют доступ пользователи определенной группы, на сайте есть ссылка для скачивания файла формата .xls, данный файл автоматически формируется и обновляется. Проблема заключается в том, что если дать прямую ссылку на этот файл, к нему имеют доступ все, а должны иметь доступ только пользователи группы. Решить средствами .access её не получится, т.к. придется ставить пароли на файл, а это не вариант. Можно ли решить такую задачу средствами APIBitrix?»

Ответ заключался в том, что API Bitrix для подобных задач не предусмотрено, и что самым корректным вариантом доя решения этой задачи — это выставить пароль на публичную ссылку.

Но для этой задачи есть еще решение, без установки пароля. Требуется заменить прямую ссылку на файл .xls, на файл формата .php

<a href="/local/action/price.php" target="_blank">Скачать прайс</a>

В .php файле проверяем (находится в папке local), авторизован ли пользователь, затем заново формируем .xls файл.

<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('NO_AGENT_CHECK', true);
global $USER;

if ($USER->IsAuthorized())
{
    $filename = $_SERVER["DOCUMENT_ROOT"]."/price/price.xls";
    header('Content-Description: File Transfer');
    header('Cache-Control: public');
    header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
    header('Content-Disposition: attachement;filename="price-list.xls');
    readfile($filename);
}

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php");
Experience the gaming enchantment at Glory's enchanting gaming allure , where allure captivates.