При разработке и администрировании крупных систем на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с ситуацией, когда в конфигурации присутствует огромное количество ролей (иногда более 1000). В таких условиях поиск конкретной роли, которая предоставляет права на справочник, документ или отчет, превращается в трудоемкую задачу. Стандартный метод — заходить в каждый объект, переходить на вкладку Права и пролистывать бесконечный список — крайне неэффективен. Рассмотрим подробнее более быстрые и современные способы решения этой задачи.
Это самый простой и быстрый способ, о котором многие разработчики забывают или не знают. Вместо того чтобы анализировать права конкретного объекта, мы можем открыть общую матрицу прав всей конфигурации.
Перед нами откроется масштабная таблица. В левой части отображается дерево всех объектов метаданных, а в правой — колонки, соответствующие каждой роли в системе. Проанализируем, как с этим работать: выбрав нужный объект (например, Документ.РеализацияТоваровУслуг), мы увидим в строке установленные флажки (права). Прокручивая таблицу вправо, можно быстро визуально определить, в каких колонках-ролях стоят отметки. Это значительно быстрее, чем открывать каждую роль по отдельности.
Важный нюанс: для разных типов объектов набор прав будет отличаться. Для отчетов и обработок вы увидите только три основных права (Использование, Просмотр и т.д.), в то время как для регистров и документов набор прав будет полным. Если вам кажется, что прав «мало», убедитесь, что вы выбрали объект соответствующего типа.
Если разработка ведется в современной среде EDT, задача упрощается благодаря мощным индексам поиска. Разберем, как это сделать:
Воспользуемся механизмом Поиск ссылок (Search for References). При выборе объекта метаданных и запуске поиска, EDT мгновенно выдаст список всех мест, где упоминается этот объект, включая роли. Кроме того, в EDT реализован специализированный редактор прав, который поддерживает текстовую фильтрацию. Мы можем просто ввести название роли или объекта в строку поиска внутри редактора, что исключает необходимость бесконечной горизонтальной прокрутки, характерной для обычного Конфигуратора.
В современных конфигурациях, таких как ERP Управление предприятием, Управление торговлей 11 или Бухгалтерия предприятия 3.0, реализованы мощные инструменты анализа прав непосредственно в пользовательском интерфейсе. Это наиболее удобный способ для администраторов систем.
Перейдем в раздел Администрирование — Настройки пользователей и прав. Найдем отчет Анализ прав доступа. Этот отчет позволяет:
Этот инструмент выигрывает у Конфигуратора тем, что он показывает итоговую картину прав с учетом профилей групп доступа, что гораздо ближе к реальной практике администрирования. Для решения этой задачи также подойдёт внешняя обработка для анализа прав доступа к выбранному объекту.
Иногда требуется получить список ролей программно, например, для аудита системы. Напишем небольшой фрагмент кода, который поможет проанализировать права. Мы будем использовать коллекцию Метаданные.Роли.
Рассмотрим пример функции, которая обходит все роли и ищет те, в которых есть право Чтение на определенный объект:
Процедура НайтиРолиПоОбъекту(ИмяОбъектаМетаданных)
Для Каждого ТекущаяРоль Из Метаданные.Роли Цикл
Если ПравоДоступа("Чтение", Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных), ТекущаяРоль) Тогда
Сообщить("Объект задействован в роли: " + ТекущаяРоль.Имя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Проанализируем ситуацию: прямой перебор всех ролей через ПравоДоступа() может работать медленно, если ролей более 1200. Для оптимизации рекомендуется один раз выгрузить структуру прав в таблицу значений с индексами по именам объектов и ролей. Это позволит выполнять поиск мгновенно при повторных запросах.
Для продвинутых специалистов существует способ «грубой силы», который иногда оказывается самым эффективным. Мы можем выгрузить конфигурацию в файлы (через меню Конфигурация — Выгрузить конфигурацию в файлы).
После выгрузки в папке проекта появится директория Roles, где каждая роль представлена отдельным XML-файлом. Используя любой текстовый редактор с поддержкой поиска по файлам (например, VS Code), мы можем выполнить поиск по строке с именем нашего объекта. Выясним причину популярности этого метода: он позволяет мгновенно найти все вхождения объекта во всех файлах ролей одновременно, не дожидаясь отрисовки интерфейса 1С.
Важно помнить, что в современной архитектуре 1С права могут определяться не только в основной конфигурации, но и в расширениях. Если вы используете метод «Все роли» в основной конфигурации, вы не увидите прав, добавленных через расширения. Чтобы получить полную картину, необходимо проделать аналогичные действия внутри каждого подключенного расширения. Права в 1С суммируются, поэтому наличие доступа хотя бы в одном расширении даст пользователю права на объект, даже если в основной конфигурации они отсутствуют.
Подведем итог: для быстрой разовой проверки лучше всего подходит встроенная матрица Все роли в Конфигураторе. Для глубокого анализа прав пользователей в работающей базе идеальным инструментом будет отчет Анализ прав доступа из состава БСП. Если же вы занимаетесь активной разработкой, стоит освоить поиск ссылок в EDT или метод поиска по выгруженным XML-файлам. Для автоматизации этих процессов можно воспользоваться профессиональным инструментом для управления правами и автоподбора ролей.