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