При разработке и администрировании систем на платформе «1С:Предприятие 8» разработчики часто сталкиваются с неочевидным поведением прав доступа. Типичная ситуация: у пользователя есть доступ к справочнику или документу, он может изменять ключевые поля (например, Наименование или Код) и успешно записывать элемент, однако другие реквизиты, расположенные на той же управляемой форме (особенно объединенные в группы), отображаются как недоступные для редактирования или вовсе пропадают с экрана. При этом программный код в модуле формы, который мог бы управлять видимостью или доступностью элементов, полностью отсутствует.
В этой статье мы подробно разберем, почему возникает такая проблема, как устроена система разграничения прав на уровне отдельных полей в платформе 1С, и проанализируем влияние флагов управления правами в конфигураторе.
Первое, что необходимо проанализировать — это точечные права доступа в роли пользователя. В системе 1С права доступа настраиваются не только на объект метаданных в целом (например, на весь справочник), но и на каждое его поле (реквизит, табличную часть или стандартный реквизит) в отдельности.
Если у пользователя есть право Изменение на сам справочник, он сможет редактировать те реквизиты, на которые у него есть явные права. Если же для конкретных реквизитов в роли сняты флажки Просмотр и Редактирование, то на управляемой форме поведение платформы будет следующим:
Просмотр — поле полностью скрывается с формы, даже если элемент формы физически там присутствует. Если эти поля были объединены в группу, вся группа может выглядеть пустой или также скрыться.Просмотр, но отсутствии права Редактирование — поле отображается на форме, но становится недоступным для изменения (отображается серым цветом, в него нельзя ввести данные).Для решения этой проблемы необходимо открыть конфигуратор, найти роль пользователя, перейти на вкладку «Шаблоны ограничений» или напрямую в дерево метаданных роли, выбрать нужный справочник и проверить права на уровне его реквизитов. Для комплексного анализа прав и ролей непосредственно в режиме «1С:Предприятие» можно использовать обработку для анализа и настройки прав доступа.
Часто разработчики задаются вопросом: «Почему права на реквизиты оказались сняты, если я вручную их не трогал?». Выясним причину этой особенности разработки в 1С. Такая ситуация регулярно возникает при определенной последовательности действий:
При добавлении новых реквизитов в существующий объект права на них в уже созданных ролях могут не проставиться автоматически. Поведение платформы в данном случае полностью определяется тремя флагами в корневом элементе роли в конфигураторе.
Рассмотрим подробнее эти три флага и стандарты разработки фирмы «1С» (в частности, Стандарт № 532):
Проанализируем опасную ловушку платформы: если в конфигурации есть хотя бы одна роль с включенным флажком Независимые права подчиненных объектов, в которой случайно или намеренно взведен флаг автоустановки прав по умолчанию, то при любом обновлении метаданных права на реквизиты могут массово перетереться. Нам необходимо следить за тем, чтобы этот флаг использовался осознанно и только там, где действительно требуется строгое ограничение доступа к отдельным конфиденциальным полям объекта (например, скрытие коммерческой наценки или персональных данных в справочнике партнеров).
Если в вашей системе активно применяются расширения, права на реквизиты могут вести себя нетипично. При заимствовании объектов в расширение или добавлении новых реквизитов через расширение права на них могут не сопоставиться с основными ролями конфигурации. В таком случае требуется проверить, какие роли добавлены в самом расширении и назначены ли в них права на новые реквизиты.
Если вы проверили права в конфигураторе и убедились, что права Просмотр и Редактирование на реквизиты установлены, но у конкретного пользователя доступ по-прежнему отсутствует, рекомендуем проверить следующие механизмы платформы:
Еще -> Изменить форму и случайно скрыл группу или установил для нее определенные свойства отображения, форма будет выглядеть некорректно. Для исправления ситуации выполните сброс настроек:
Решение: В режиме «1С:Предприятие» откройте форму элемента, нажмите Еще -> Изменить форму -> в открывшемся окне нажмите кнопку Еще -> Установить стандартные настройки.
// Пример программного ограничения доступа к элементам формы на сервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Блокировка доступности группы реквизитов для пользователей без роли Администратор
Если Не РольДоступна("ПолныеПрава") Тогда
Элементы.ГруппаСлужебныеДанные.Доступность = Ложь;
Элементы.ГруппаСлужебныеДанные.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Внимательно проанализируйте общий модуль МодификацияКонфигурацииПереопределяемый или аналогичные обработчики, которые могут динамически накладывать ограничения на элементы управляемой формы в момент ее открытия.
/ClearCache или очистить кэш вручную.Для предотвращения подобных проблем при разработке придерживайтесь следующих правил:
Независимые права подчиненных объектов выключенным для всех ролей, кроме специфических сценариев безопасности.Устанавливать права для новых объектов был включен исключительно для роли с полными правами.