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