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