При работе в программе 1С:Документооборот 2.1 (особенно в релизах ветки 2.1.31) системные администраторы и разработчики часто сталкиваются с неприятной ситуацией: пользователи с ограниченными правами не могут подписать документ электронной подписью. Проблема проявляется внезапно, даже если у пользователя корректно настроен сертификат и установлены все необходимые программы для криптографии.
В этой статье мы подробно разберем, почему возникает ошибка «Нарушение прав доступа», проанализируем технические причины сбоя и рассмотрим несколько способов решения этой проблемы — от простой настройки ролей до использования расширений конфигурации.
Для начала проанализируем текст ошибки, который выдает система. Чаще всего стек вызова указывает на следующую строку:
ТипПодписи = Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
Ошибка возникает в общем модуле или в форме справочника СертификатыКлючейЭлектроннойПодписиИШифрования. Суть проблемы заключается в том, что в коде типового решения происходит обращение к значению константы напрямую. В некоторых версиях конфигурации (например, 2.1.31.5) права на чтение этой конкретной константы были по ошибке исключены из стандартных ролей, предназначенных для обычных пользователей.
Когда система пытается выполнить метод Получить() в контексте сервера, механизм проверки прав 1С блокирует операцию, так как у пользователя нет права «Чтение» для объекта Константа.ТипПодписиКриптографииПоУмолчанию. При этом под полными правами всё работает корректно, что подтверждает гипотезу о недостатке полномочий.
Прежде чем переходить к программированию, проверим стандартные настройки прав доступа. В Библиотеке стандартных подсистем (БСП), на которой базируется «1С:Документооборот», за работу с электронной подписью отвечают специфические роли.
Рассмотрим по шагам, что нужно проверить:
Программы электронной подписи и шифрования.Если добавление этих ролей не помогло, значит, мы столкнулись с ошибкой в самой конфигурации, где право на чтение константы не включено ни в одну из доступных рядовому пользователю ролей.
Если вы не планируете в ближайшее время обновлять конфигурацию до актуального релиза, наиболее правильным и безопасным методом будет использование расширения. Это позволит нам точечно добавить необходимые права, не снимая основную конфигурацию с поддержки.
Разберем процесс создания такого расширения:
Константа.ТипПодписиКриптографииПоУмолчанию.ИсправлениеПравЭП.ИспользоватьЭлектронныеПодписи, так как она часто проверяется вместе с типом подписи.Альтернативный вариант в расширении — перехватить вызов процедуры подписания и выполнить чтение константы в привилегированном режиме. Рассмотрим пример кода для общего модуля:
&После("УстановитьДоступностьЭлементовТипаПодписи")
Процедура Испр_УстановитьДоступностьЭлементовТипаПодписи()
УстановитьПривилегированныйРежим(Истина);
// Теперь чтение константы пройдет успешно под любым пользователем
ТипПодписи = Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Разработчики фирмы «1С» признали данную проблему ошибкой и выпустили соответствующие исправления. В релизах 2.1.32 и выше права доступа на объекты криптографии были пересмотрены и исправлены.
Проанализируем, почему обновление является приоритетным решением:
Выясним еще одну неочевидную причину. В системе 1С права на чтение константы могут быть ограничены функциональными опциями. Если константа ТипПодписиКриптографииПоУмолчанию входит в состав функциональной опции, которая не включена или к которой у пользователя нет доступа, метод Получить() может возвращать ошибку прав доступа.
Проверьте в настройках программы (раздел "Настройка и администрирование"), включена ли функциональность использования электронных подписей глобально. Иногда "слет" этой настройки после обновления платформы приводит к каскадным ошибкам в правах доступа.
Подводя итог, отметим, что самым быстрым "костылем" для восстановления работы сотрудников является создание расширения с предоставлением прав на чтение константы, а самым правильным стратегическим решением — плановое обновление программы до версии 2.1.32 или переход на 1С:Документооборот 3.0.