Как массово снять разрешение для всех ролей на всю группу метаданных в 1С

Программист 1С v8.3 (Управляемые формы)
← На главную

При работе с крупными конфигурациями 1С программисты часто сталкиваются с задачей массового изменения прав доступа. Например, необходимо запретить интерактивное удаление для всех документов во всех существующих ролях. Стандартный интерфейс Конфигуратора в этом плане накладывает серьезные ограничения: попытка массово снять галочку часто приводит к тому, что система, напротив, устанавливает ее, а в дополнение автоматически включает право Чтение. В этой статье мы подробно разберем, почему так происходит, и рассмотрим профессиональные способы решения этой задачи, включая работу с файловой выгрузкой и современными инструментами разработки.

Анализ проблемы: ограничения интерфейса Конфигуратора

Разберем ситуацию, с которой сталкивается разработчик. Открывая окно редактирования ролей и выбирая целую ветку метаданных (например, Документы), мы ожидаем, что нажатие на колонку конкретного права (например, Удаление) снимет его у всех объектов. Однако на практике интерфейс Конфигуратора часто ведет себя иначе. Это связано с тем, что в UI реализовано логическое правило: за один клик можно совершить только одно действие — либо массовую установку, либо массовое снятие. Поскольку установка прав требуется чаще, приоритет отдается ей.

Более того, в системе 1С существует жесткая иерархия прав. Проанализируем зависимость: такие права, как Удаление, Изменение или Интерактивное удаление, технически не могут существовать без права на Чтение и Просмотр. Как только вы пытаетесь установить право на удаление, Конфигуратор автоматически проставляет право Чтение, чтобы сохранить логическую целостность метаданных. При массовых операциях это превращается в проблему, так как «откатить» эти изменения назад так же массово через интерфейс крайне сложно.

Способ 1: Использование выгрузки конфигурации в файлы

Проанализируем наиболее надежный метод, который упоминали опытные разработчики в обсуждении. Если интерфейс Конфигуратора не позволяет удобно управлять галочками, мы можем отредактировать структуру прав напрямую в текстовом (XML) формате. Рассмотрим этот процесс по шагам:

  1. Выгрузка конфигурации: Перейдем в меню Конфигурация — Выгрузить конфигурацию в файлы.... Выберем пустую папку для сохранения структуры.
  2. Поиск файлов ролей: В каталоге выгрузки найдем папку Roles. В ней содержатся XML-файлы для каждой роли в системе.
  3. Редактирование XML: Откроем файл нужной роли. Структура прав для каждого объекта описывается блоком <object>. Рассмотрим пример структуры для справочника:

<object>
    <name>Catalog.ШаблоныАнкет</name>
    <right>
        <name>InteractiveDelete</name>
        <value>false</value>
    </right>
    <right>
        <name>InteractiveDeletePredefinedData</name>
        <value>false</value>
    </right>
</object>

Выясним важную особенность: если право установлено в значение true, оно обязательно присутствует в файле. Если мы хотим массово снять права, нам достаточно найти блоки с InteractiveDelete и заменить значение true на false. Если же для объекта установлены абсолютно все права, 1С может вообще не упоминать этот объект в файле выгрузки, считая разрешения полными по умолчанию.

Для автоматизации этого процесса воспользуемся скриптами (например, на языке Python или через PowerShell), которые пройдутся по всем файлам в папке Roles и выполнят замену текста. После внесения правок выполним обратную операцию: Конфигурация — Загрузить конфигурацию из файлов.

Способ 2: Использование 1C:Enterprise Development Tool (EDT)

Современная среда разработки EDT предоставляет гораздо более гибкие инструменты для работы с метаданными. Рассмотрим, как решить нашу задачу в этой среде:

  1. Импортируем проект конфигурации в EDT.
  2. Откроем редактор ролей. В отличие от Конфигуратора, редактор в EDT позволяет выделять произвольные группы объектов и массово изменять их свойства в панели Properties (Свойства).
  3. Выделим все документы и в списке прав снимем галочку с нужного пункта. EDT корректно обрабатывает зависимости и позволяет более гибко управлять изменениями, не затрагивая лишние права без необходимости.

Этот метод является наиболее прогрессивным, так как он исключает ошибки ручного редактирования XML-файлов и предоставляет визуальный контроль над процессом.

Способ 3: Механизм сравнения и объединения

Посмотрим на ситуацию под другим углом. Если нам нужно массово «очистить» права, мы можем использовать механизм объединения конфигураций. Разберем этот алгоритм:

  1. Создадим в конфигурации новую «чистую» роль, в которой все права сняты.
  2. Выгрузим эту роль в файл (или сохраним конфигурацию).
  3. Запустим процедуру Сравнить, объединить с конфигурацией из файла, выбрав этот же файл конфигурации.
  4. В окне сравнения снимем все галочки, оставим только те роли, которые нужно поправить.
  5. Настроим правила объединения таким образом, чтобы права заимствовались из нашей «пустой» роли. Это позволит массово перетереть настройки прав в целевых ролях.

Способ 4: Автоматизация пользовательского интерфейса (AutoHotKey)

Если по каким-то причинам выгрузка в файлы недоступна, а объектов слишком много для ручной правки, проанализируем возможность использования инструментов автоматизации кликов, таких как AutoHotKey (AHK). Рассмотрим простую логику скрипта:

Мы можем написать скрипт, который будет имитировать нажатие клавиши «вниз» и клик мышкой по определенным координатам или нажатие клавиши «пробел» для снятия галочки. Это «грубый» метод, но он эффективно решает проблему UI-ограничений Конфигуратора, когда нужно просто «прощелкать» 500 документов подряд.

Почему автоматически ставится право «Чтение»?

Разберем подробнее внутреннюю логику системы. В 1С права доступа строятся на принципе расширения. Невозможно удалить объект, если система не «видит» его в базе данных. Поэтому, как только разработчик дает право на Удаление, платформа автоматически гарантирует пользователю право на Чтение (Read) и Просмотр (View).

При попытке массового снятия через Конфигуратор, система часто путается в текущих состояниях разных объектов (у одного чтение было, у другого нет) и выбирает «безопасный» режим — включает всё. Понимание этой связи помогает осознать, что наиболее чистым способом будет именно программная правка XML-файлов, где мы можем жестко задать value = false для конкретного права, не трогая остальные узлы.

Практические рекомендации

Проанализировав все доступные варианты, выделим оптимальный план действий:

Таким образом, комбинируя стандартные возможности платформы с внешними инструментами обработки текста, можно обойти любые ограничения интерфейса и эффективно управлять безопасностью системы даже в самых крупных программных продуктах на базе 1С.

← На главную