В практике администрирования и разработки на платформе «1С:Предприятие 8.3» часто возникает задача точечного ограничения прав пользователей. Например, требуется запретить конкретному сотруднику изменять или создавать документ ПлатежноеПоручение, сохранив при этом все остальные административные или расширенные права. На первый взгляд решение кажется очевидным: скопировать роль ПолныеПрава, внести в нее изменения и назначить пользователю. Однако при таком подходе разработчики регулярно сталкиваются с критическими ошибками при запуске системы.
В данной статье мы подробно разберем, почему простое копирование роли «Полные права» приводит к сбоям, как решить эту проблему с помощью стандартных механизмов Библиотеки стандартных подсистем (БСП) и как правильно использовать механизм расширений конфигурации для гибкой настройки прав без изменения типовой конфигурации.
Рассмотрим ситуацию, когда разработчик создает копию системной роли ПолныеПрава (например, называет ее ПолныеПраваКопия), усекает в ней права на определенный документ и назначает пользователю взамен оригинальной роли. При попытке входа в информационную базу под этим пользователем система выдает ошибку доступа и аварийно завершает работу.
Выясним глубинную причину этого поведения. Библиотека стандартных подсистем (БСП), на базе которой построены практически все современные конфигурации 1С (ERP, КА, УТ, БП, ЗУП), содержит жестко закодированные проверки (хардкод). При запуске программы, обновлении информационной базы или выполнении регламентных процедур система обращается к коду программных модулей, где проверяется наличие у текущего пользователя конкретной роли по ее имени.
Проанализируем пример кода БСП, который может отрабатывать при авторизации пользователя:
Если Не РольДоступна("ПолныеПрава") Тогда
// Выполняется дополнительная проверка на доступность базовых функций системы
Если Не РольДоступна("БазовыеПраваБСП") Тогда
ВызватьИсключение NStr("ru = 'Недостаточно прав для работы с системой. Обратитесь к администратору.'");
КонецЕсли;
КонецЕсли;
Даже если скопированная роль ПолныеПраваКопия содержит абсолютно идентичный набор разрешений на все объекты метаданных, для программного кода системы этот пользователь больше не является полноправным администратором. Код БСП ищет роль с точным строковым именем "ПолныеПрава". Не найдя ее, система переходит к проверке других минимально необходимых разрешений. Если у пользователя также отсутствуют системные роли (например, роли для работы в тонком клиенте или базовые права БСП), программа блокирует вход.
Решение проблемы при копировании ролей: для того чтобы пользователь со скопированной или модифицированной ролью мог успешно пройти авторизацию в системе, ему необходимо в Конфигураторе в списке «Прочие» настроек пользователя обязательно добавить роль БазовыеПраваБСП (или аналогичную базовую роль, отвечающую за запуск клиента и работу системных механизмов).
Копирование роли «Полные права» в конфигураторе — это устаревший метод, который усложняет последующую поддержку и обновление программного продукта. Более правильным и архитектурно верным решением в режиме «1С:Предприятие» является использование профилей групп доступа.
Рассмотрим, как настроить права по шагам через пользовательский интерфейс:
Базовые права БСП (или Запуск тонкого клиента / Запуск веб-клиента), что обеспечит беспрепятственный вход в программу.Среди разработчиков 1С долгое время существовало заблуждение, что права доступа в системе можно только добавлять, а отнимать (сужать) нельзя. Для стандартных ролей в основной конфигурации это действительно так: если пользователю назначены две роли, и одна из них разрешает чтение документа, а вторая запрещает, то по принципу объединения прав («ИЛИ») действие будет разрешено.
Однако с развитием платформы (начиная с версии 8.3.11) разработчики получили возможность полноценно управлять правами через **расширения конфигурации**. В расширениях этот механизм работает по-другому:
Важное условие: ограничение прав через расширение сработает только в том случае, если у пользователя в режиме «1С:Предприятие» отобрана оригинальная роль основной конфигурации без ограничений, а назначена именно измененная роль из расширения.
Рассмотрим подробнее процесс настройки ограничений прав на документ ПлатежноеПоручение с использованием механизма расширений. При этом нам не потребуется переносить («стягивать») всю метаструктуру конфигурации в расширение — мы применим метод выборочного заимствования.
Выполним следующие шаги:
ПлатежноеПоручение, вызовем контекстное меню правой кнопкой мыши и выберем пункт Добавить в расширение. При этом перенесется только ссылка на объект, а не вся его структура.ПлатежноеПоручение.Редактирование и Интерактивное удаление. Флажки изменят свой статус на явно отключенные.При использовании ролей в расширениях в клиент-серверном варианте работы необходимо учитывать требования безопасности платформы:
Безопасный режим.Таким образом, использование расширений для модификации прав доступа — это наиболее гибкий и безопасный метод, позволяющий сохранить конфигурацию на поддержке и гарантировать успешное обновление системы силами клиента.