У нас в корпоративном портале есть . Этот модуль позволяет работать с документами компании и редактировать их в Office открывая непосредственно из браузера. Для этого используется технология webdav, которая по умолчанию работает для Internet Explorer в связке с MS Office 2010. Или через плагин для браузера FireFox.
Но есть определенное неудобство. Дело в том, что доступ ко всей информации портала возможен только по паролю, и чтобы пользователь оставался авторизованным не вводя пароль на каждый хит, в передаётся уникальный идентификатор сессии. Но вот офис ничего не знает об этом, поэтому требует от пользователя ввода пароля.
[CUT]

Что, согласитесь, не очень удобно. А когда надо часто работать с документами, может вообще сильно досаждать.
Что можно сделать
Самое очевидное решение - настроить для работы с порталом. Тогда все приложения компьютера (в том числе Office) будут передавать специальные данные авторизации на портал. Но сопряжена с определенными техническими трудностями. А кроме того, в организации может быть не установлен AD сервер. И могут быть пользователи портала вне домена AD. Иными словами, не всегда это возможно.
Можно сделать иначе: передавать офису в ссылке на документы идентификатор сессии, а на стороне сервера незаметно для основного функционала подменять его. Открываться будет всегда без пароля, но при сохранении может потребоваться ввод пароля если текущая сессия истекла (это будет особенно актуально если в настройках модуля проактивной защиты включена смена идентификатора сессии).
Просто так в качестве параметра передавать идентификатор сессии нельзя т.к. протокол webdav подразумевает несколько последовательных запросов к серверу, в процессе которых параметры запроса теряются.
Решение
Нам потребуется сделать две правки: подменить ссылку на документы и научиться правильно понимать такие ссылки.
Для надо:
1) Скопировать шаблон компонента bitrix:webdav.section.list в шаблон сайта .default (или текущего сайта). Или, говоря проще, папку
/bitrix/components/bitrix/webdav.section.list/templates/.default
копируем в
/bitrix/templates/.default/components/bitrix/webdav.section.list
Теперь вместо стандартного шаблона библиотека документов будет использовать наш собственный.
2) Создать файл result_modifier.php в папке /bitrix/templates/.default/components/bitrix/webdav.section.list/.default со следующим содержимым:
Теперь ссылки на документы будут иметь вид, представленный на скриншоте.

3) Добавить в файл /bitrix/php_interface/init.php (или создать его, если не существует) следующий код:
Убедитесь что нет пробелов и переносов строк до "<?" и после "?>", иначе можете получить "ошибку в типе содержимого".
Всё! Теперь документы можно открывать и сохранять без дополнительного запроса авторизации!
Но есть определенное неудобство. Дело в том, что доступ ко всей информации портала возможен только по паролю, и чтобы пользователь оставался авторизованным не вводя пароль на каждый хит, в передаётся уникальный идентификатор сессии. Но вот офис ничего не знает об этом, поэтому требует от пользователя ввода пароля.
[CUT]

Что, согласитесь, не очень удобно. А когда надо часто работать с документами, может вообще сильно досаждать.
Что можно сделать
Самое очевидное решение - настроить для работы с порталом. Тогда все приложения компьютера (в том числе Office) будут передавать специальные данные авторизации на портал. Но сопряжена с определенными техническими трудностями. А кроме того, в организации может быть не установлен AD сервер. И могут быть пользователи портала вне домена AD. Иными словами, не всегда это возможно.
Можно сделать иначе: передавать офису в ссылке на документы идентификатор сессии, а на стороне сервера незаметно для основного функционала подменять его. Открываться будет всегда без пароля, но при сохранении может потребоваться ввод пароля если текущая сессия истекла (это будет особенно актуально если в настройках модуля проактивной защиты включена смена идентификатора сессии).
Просто так в качестве параметра передавать идентификатор сессии нельзя т.к. протокол webdav подразумевает несколько последовательных запросов к серверу, в процессе которых параметры запроса теряются.
Решение
Нам потребуется сделать две правки: подменить ссылку на документы и научиться правильно понимать такие ссылки.
Для надо:
1) Скопировать шаблон компонента bitrix:webdav.section.list в шаблон сайта .default (или текущего сайта). Или, говоря проще, папку
/bitrix/components/bitrix/webdav.section.list/templates/.default
копируем в
/bitrix/templates/.default/components/bitrix/webdav.section.list
Теперь вместо стандартного шаблона библиотека документов будет использовать наш собственный.
2) Создать файл result_modifier.php в папке /bitrix/templates/.default/components/bitrix/webdav.section.list/.default со следующим содержимым:
<?
foreach($arResult['GRID_DATA'] as $k=>$v)
{
$el = &$arResult['GRID_DATA'][$k];
if ($el['data']['TYPE'] == 'E')
{
$el['columns']['NAME'] = preg_replace('#(href="[^"]*)/([^/]+")#','$1/PHPSESSID='.session_id().'/$2',$el['columns']['NAME']);
$el['actions'][0]['ONCLICK'] = preg_replace('#(\'[^\']*)/([^/]+\')#','$1/PHPSESSID='.session_id().'/$2',$el['actions'][0]['ONCLICK']);
}
}
?> |
Теперь ссылки на документы будут иметь вид, представленный на скриншоте.

3) Добавить в файл /bitrix/php_interface/init.php (или создать его, если не существует) следующий код:
<?
if (preg_match('#/PHPSESSID=([a-z0-9]+)#',$_SERVER['REQUEST_URI'],$regs))
{
session_id($regs[1]);
session_start();
$_SERVER['REQUEST_URI'] = $REQUEST_URI = str_replace($regs[0],'/',$_SERVER['REQUEST_URI']);
}
?> |
Убедитесь что нет пробелов и переносов строк до "<?" и после "?>", иначе можете получить "ошибку в типе содержимого".
Всё! Теперь документы можно открывать и сохранять без дополнительного запроса авторизации!
