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