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