В этой статье мы подробно разберем задачу настройки прав доступа в конфигурации "1С:Управление нашей фирмой" (УНФ). Рассмотрим гибкую настройку прав в 1С:УНФ, которая позволяет убрать лишнее из типовых профилей. Часто возникает ситуация, когда типовой профиль (например, "Продажи") в целом подходит сотруднику, но содержит лишние права — например, возможность устанавливать цены или видеть себестоимость.
Мы проанализируем, как правильно создать производный профиль, как безопасно отключить ненужные роли и, самое главное, как понять, какая именно роль отвечает за конкретный пункт меню интерфейса. Если же вам нужно ограничить доступ не на уровне ролей, а на уровне интерфейса, можно использовать специальный контроль видимости и доступности элементов управляемой формы.
Допустим, нам необходимо настроить доступ для менеджеров. За основу мы хотим взять предопределенный профиль "Продажи", но с одним исключением: менеджеры не должны иметь доступ к установке цен номенклатуры (пункт меню Продажи / Цены и скидки / Установка цен).
Роли в предопределенных профилях обычно закрыты для редактирования. Поэтому перед нами стоит выбор правильной стратегии реализации: копирование профиля в режиме предприятия или доработка через расширение.
Это самый безопасный и быстрый способ, который не требует вмешательства в код конфигурации и снятия её с поддержки. Мы создадим копию типового профиля и отредактируем её.
Разберем процесс по шагам:
Важный нюанс: При таком подходе связь с типовым профилем теряется. Если при обновлении 1С разработчики добавят в типовой профиль "Продажи" новую роль (например, для работы с новым документом "Акцизная накладная"), в вашем скопированном профиле эта роль автоматически не появится. Вам придется отслеживать изменения релизов и добавлять новые роли вручную, иначе у пользователей может перестать работать часть функционала.
Если вы хотите, чтобы ваш профиль обновлялся вместе с конфигурацией и был доступен как "предопределенный", но с вашими корректировками, лучше всего использовать механизм Расширений конфигурации.
В типовых конфигурациях на базе БСП (Библиотека Стандартных Подсистем), к которым относится УНФ, управление ролями и профилями доступа построено на том, что профили формируются программно в общем модуле. Чтобы быстрее разобраться в программном управлении доступом, рекомендуем изучить справочник по методам БСП с примерами использования.
Посмотрим на техническую реализацию:
УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа.В этой процедуре мы можем описать свой профиль, скопировав код типового профиля и закомментировав ненужные роли. Либо мы можем модифицировать существующий, используя параметры обновления.
Параметр процедуры ПараметрыОбновления представляет собой структуру со следующими важными полями:
ОбновлятьИзмененныеПрофили (Булево, по умолчанию Истина)ЗапретитьИзменениеПрофилей (Булево, по умолчанию Истина)Если вы хотите разрешить редактирование даже типовых (поставляемых) профилей в режиме предприятия, можно использовать следующий код в расширении (в режиме "После"):
Процедура ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписаниеПрофилей, ПараметрыОбновления) Экспорт
// Разрешаем изменение поставляемых профилей администратором
ПараметрыОбновления.Вставить("ЗапретитьИзменениеПрофилей", Ложь);
КонецПроцедуры
Однако, изменять типовые профили напрямую не рекомендуется. При очередном обновлении конфигурации ваши изменения могут быть затерты "заводскими" настройками, или профиль вернется в исходное состояние, если механизм обновления прав решит его пересоздать.
Более надежный вариант — создать свой собственный поставляемый профиль в коде. Для этого можно воспользоваться обработкой из состава БСП "Инструменты разработчика: Управление доступом" (если она включена в состав) или просто скопировать определение профиля "Продажи" в свой код, сгенерировать новый Идентификатор и убрать лишние строки Описание.Роли.Добавить(...).
Самый сложный вопрос для начинающих специалистов: "Как понять, какую именно роль нужно отключить, чтобы пропал конкретный пункт меню?". В нашем примере это "Установка цен".
Метод "перебора всех ролей" крайне неэффективен, так как ролей в современных конфигурациях сотни.
Интерфейс программы строится на основе прав доступа к объектам метаданных. Если у пользователя нет права "Просмотр" на объект, то и пункт меню, ведущий к этому объекту, отображаться не будет.
УстановкаЦенНоменклатуры (или УстановкаЦен в зависимости от версии).Обычно имена ролей говорят сами за себя. Скорее всего, вы найдете роли типа:
ДобавлениеИзменениеЦенНоменклатурыЧтениеЦенНоменклатурыИменно эти роли нужно найти в вашем профиле доступа и отключить.
Если доступа к Конфигуратору нет, можно воспользоваться встроенными отчетами или инструментом на поиск прав доступа для пользователя, который позволяет быстро определить, какие роли дают доступ к конкретному документу или отчету.
При отключении ролей следует помнить о системе зависимостей и шаблонах прав в 1С.
1. Базовые права.
Никогда не отключайте роль БазовыеПраваУНФ (или аналогичную, например Пользователь). Без этой роли пользователь не сможет даже запустить программу. Обычно она включена во все типовые профили по умолчанию.
2. Иерархия прав.
Если вы хотите запретить редактирование, но оставить просмотр, ищите роли, начинающиеся со слова ДобавлениеИзменение... или Редактирование.... Оставьте включенной роль Чтение... или Просмотр....
3. Роли "Полные права".
Убедитесь, что в профиле случайно не включена роль ПолныеПрава или АдминистраторСистемы. Если такая роль включена, то отключение мелких ролей (типа "Редактирование цен") не даст эффекта, так как "Полные права" перекрывают все запреты.
4. Роль vs RLS (Ограничение доступа на уровне записей).
Важно различать отключение функционала и ограничение видимости данных.
Для решения задачи автора темы оптимальным является следующий алгоритм:
УстановкаЦен и выяснить точное название роли, дающей право на его добавление и изменение (например, ДобавлениеИзменениеЦенНоменклатуры).Этот метод позволяет гибко настроить доступ, не прибегая к сложному программированию, но требует внимания при последующих обновлениях базы.