Имеется следующая задача: Есть закрытый сайт от внешних пользователей. На сайте имеется ссылка на прайс в фомате .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");