В процессе автоматизации бизнес-процессов часто возникают задачи, когда пользователю необходимо выполнить действие, выходящее за рамки его стандартных прав доступа. Например, требуется программно изменить реквизиты элемента справочника при проведении документа, при этом права на изменение этого справочника у пользователя отсутствуют. Рассмотрим, как решить эту проблему, соблюдая требования безопасности и логику работы платформы 1С.
Первым и наиболее рекомендуемым способом обхода ограничений является УстановитьПривилегированныйРежим. Этот механизм позволяет переключить сеанс пользователя в режим, в котором платформа игнорирует проверки прав доступа (в том числе RLS).
Важно помнить, что привилегированный режим работает только на сервере. Для корректной работы необходимо выполнить следующие условия:
Разберем пример реализации:
Процедура ЗаписатьСправочникПривилегированно(СсылкаНаОбъект, НовыеДанные) Экспорт
УстановитьПривилегированныйРежим(Истина);
Объект = СсылкаНаОбъект.ПолучитьОбъект();
Объект.Реквизит = НовыеДанные;
Объект.Записать();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Если же вы используете общий модуль, для которого в свойствах уже установлена галочка «Привилегированный», вызывать УстановитьПривилегированныйРежим внутри него не требуется — он уже будет работать в нужном режиме по умолчанию.
Если привилегированный режим не дает желаемого эффекта или вы хотите пропустить проверки, которые срабатывают в модуле объекта при записи (например, проверки заполнения реквизитов или подписки на события), можно воспользоваться свойством ОбменДанными.Загрузка.
Этот режим позволяет «протолкнуть» запись объекта, игнорируя большинство стандартных ограничений платформы. Однако будьте крайне осторожны: использование этого метода отключает критические проверки целостности данных.
Пример использования:
Объект = СсылкаНаОбъект.ПолучитьОбъект();
Объект.ОбменДанными.Загрузка = Истина;
Объект.Реквизит = Значение;
Объект.Записать();
Рекомендация: Используйте данный метод только в крайних случаях, когда вы уверены, что игнорирование подписок на события и проверок не нарушит логику работы вашей конфигурации.
Часто задача возникает из-за того, что бизнес-процесс требует записи в справочник, хотя пользователь не должен иметь к нему прямого доступа. Вместо обхода прав доступа через программные «заплатки», рассмотрите альтернативные архитектурные решения:
РегистрСведений. На него проще настроить права доступа, а запись данных можно выполнять регламентным заданием или через привилегированный серверный вызов.РегламентныеЗадания. Они работают под учетной записью системного пользователя, обладающего необходимыми полными правами, что избавляет вас от необходимости «взламывать» права текущего активного пользователя.Анализируя ситуацию, мы видим, что наиболее надежным и «чистым» способом решения является именно вызов привилегированного серверного кода. Это позволяет сохранить контроль над тем, какие именно данные и при каких условиях может изменять пользователь, не расширяя его полномочия глобально.