У каждого консультанта есть свой персональный ад. У кого-то это закрытие месяца, у кого-то - перенос остатков, у кого-то - интеграция с маркетплейсом, которая «вчера ещё работала». У меня это был аудит прав доступа. Расскажу, как я из него выбрался - судя по разговорам с коллегами, ад этот далеко не только мой.
Пятница. 17:40. «Скинь, у кого полные права»
Классика жанра. Пятница, вечер, я уже морально в выходных. Прилетает сообщение от безопасника: «Слушай, аудит на носу. Скинь до понедельника список - у кого полные права, кто может проводить документы и кто может что-то удалять. По-хорошему бы ещё понять, нет ли лишнего». Коротко и вежливо. Планы на выходные умерли.
Потому что в базе на тот момент было 326 ролей и без малого три десятка пользователей. Такое в одном окне не глянешь - тут спускаться в шахту с фонариком.
Почему разбор прав руками - это настоящий ад
Если вы никогда не разбирали права в большой базе руками, объясню, из чего складывается боль. Она набирается из десятка мелочей, и к вечеру от них уже подташнивает.
- Права лежат не в одном месте. Есть роли, есть профили групп доступа, есть ограничения на уровне записей (RLS), есть наследование. Чтобы понять, что реально может конкретный человек, надо держать в голове всю эту конструкцию сразу.
- Ролей много, и они похожи. «ЧтениеПродаж», «ДобавлениеИзменениеПродаж», «ПродажиПолный», «ПродажиБезЦен» - и попробуй с ходу скажи, чем вторая отличается от четвёртой. А их таких десятки.
- Галочки, галочки, галочки. Открываешь роль, а там таблица объектов на права: чтение, добавление, изменение, удаление, проведение. По каждому объекту. И ты глазами сверяешь одну роль с другой, как в детской игре «найди отличия», только отличий полторы тысячи.
- Отчёт по правам отвечает только на то, что в него заложили. Да, есть штатные отчёты. Но стоит спросить чуть вбок - «а у кого из кассиров есть доступ к возвратам» - и надо строить новый отчёт или лезть руками. Живой вопрос почти всегда чуть-чуть не такой, как предусмотрено.
- Пока разбираешься - всё меняется. Ты неделю собирал картину, а за эту неделю кому-то добавили роль «на время» (которое, как известно, навсегда), и картина уже неправдивая.
В тот вечер я сделал то, что делал всегда: выгрузил, что смог, в Excel, начал сводить таблицы, подсвечивать цветом, писать формулы. Через два часа я поймал себя на мысли, что уже второй раз проверяю одну и ту же роль, потому что забыл, смотрел я её или нет. В итоге на разбор ушёл почти весь субботний день. Вот тогда и щёлкнуло.
Озарение: а что если не я разбираю, а нейросеть?
За несколько недель до этого я уже сделал обработку, которая выгружает структуру метаданных в текстовый файл для нейросети - чтобы можно было спрашивать у чата, как устроена база, какие есть таблицы и реквизиты, как правильно назвать поле в запросе. Работало отлично: кидаешь файл в чат, задаёшь вопрос словами, получаешь ответ по своей базе, а не «в общем случае в 1С обычно».
И вот сижу я в этом Excel-аду и думаю: стоп. Метаданные я нейросети уже отдаю. А права - это ведь тоже данные. Роли, объекты, кто что может - всё это лежит в базе и читается штатными средствами. Что мешает выгрузить права в такой же файл и спрашивать у чата «у кого полные права» вместо того, чтобы сверять галочки глазами?
Ничего не мешало. Кроме одного распространённого заблуждения, которое я сам же и разделял.
«Права роли из кода не достать» - и почему это неправда
Есть устойчивое мнение: права роли живут в конфигурации, и увидеть их можно только в конфигураторе. Из встроенного языка, мол, не подобраться. Я так думал годами.
Оказалось, у функции ПравоДоступа есть третий параметр, и в него можно передать роль:
ПравоДоступа("Чтение", Метаданные.Справочники.Контрагенты, Метаданные.Роли.ПолныеПрава)
Функция возвращает, есть ли у этой конкретной роли право «Чтение» на этот объект. То есть матрица «роль - объект - право» читается прямо в работающей базе, штатным методом, без конфигуратора и без разбора файлов выгрузки. Я проверил на живой базе: аргумент роли действительно учитывается, у «Полных прав» чтение объекта есть, а из нескольких сотен ролей его дают единицы. Работает.
Есть одна засада, на которой легко обжечься (я обжёгся). Если право неприменимо к типу объекта - например «Проведение» у справочника - функция не возвращает «Ложь», а выбрасывает исключение. Первый прогон у меня красиво упал. Поэтому обработка сначала определяет, какие права применимы к объекту, а потом уже спрашивает ПравоДоступа только там, где право имеет смысл. И вторая засада: на одной из старых платформ 8.3 проверка прав записи возвращала «Истина» даже там, где роль давала только чтение. Лечится простым правилом: записи без чтения в 1С не бывает, поэтому обработка засчитывает роли право записи только вместе с правом чтения.
Как в итоге работает решение
Схема тупая: кнопка, файл, чат.

- Запускаешь обработку в своей базе и жмёшь одну кнопку - «Сформировать». Обработка сама читает роли, пользователей и права и складывает всё в один Markdown-файл. Файл тут же предлагается сохранить на компьютер.
- Загружаешь этот MD-файл в чат с нейросетью (ChatGPT и любой похожий). Просто прикрепляешь файл.
- Спрашиваешь человеческим языком: «у кого полные права?», «кто может проводить по складу?», «покажи всех, у кого есть право на удаление».

Почему Markdown, а не Excel или свой отчёт? Потому что Markdown компактный и нейросеть его отлично понимает: заголовки, таблицы, списки - всё это она читает как структуру, а не как кашу. И, что мне понравилось больше всего, обработка кладёт в самое начало файла короткую инструкцию для модели. В результате нейросеть, прочитав файл, сначала сама рассказывает, что в нём лежит, и предлагает список вопросов, которые можно задать. Не надо даже придумывать формулировки - она сама подсказывает.

Что теперь попадает в файл
Файл собирается из нескольких частей, каждую можно включать или выключать галочкой.
- Роли - все роли конфигурации с синонимом и комментарием. Это справочник, к которому нейросеть обращается за расшифровкой.
- Пользователи и их роли - кто из пользователей информационной базы какие роли имеет. Именно эта связка позволяет ответить на «у кого полные права» поимённо.
- Матрица прав по выбранным объектам - вписываешь в поле объект (например
Документ.РеализацияТоваровУслугили простоРеализация), и по нему строится таблица «роль - право»: чтение, добавление, изменение, удаление, проведение. - Полный анализ - профиль каждой роли (по скольким объектам она даёт чтение и запись), что каждая роль может изменять, и группы эквивалентных ролей - тех, у кого права совпадают на всех объектах. Это прямые кандидаты на объединение.
Чтобы было понятно, что именно видит нейросеть, вот кусок настоящей выгрузки - матрица по документу реализации:
### Документ.РеализацияТоваровУслуг | Роль | Чтение | Добавление | Изменение | Удаление | Проведение | | --- | --- | --- | --- | --- | --- | | ПолныеПрава | + | + | + | + | + | | ДобавлениеИзменениеПродаж | + | + | + | | + | | ЧтениеПродаж | + | | | | | | ОтменаПроведенияПродаж | + | | + | | + |
В таблицу попадают только роли, у которых есть хотя бы одно право на объект, - иначе она утонула бы в пустых строках. Такую структуру модель читает без пояснений: это обычная Markdown-таблица.
Реальные вопросы, которые я теперь задаю
Самое приятное - формулировать ничего не надо. Спрашиваешь как в жизни. Вот что я реально спрашивал за последние пару недель.
По пользователям.
- «У кого сейчас полные права? Дай список ФИО».
- «Кто остался вообще без ролей?»
- «Какие роли назначены такому-то сотруднику?»
- «У кого одинаковый набор ролей?»
По роли.
- «Что реально даёт роль ПолныеПрава?»
- «Какие объекты роль может изменять и удалять?»
- «Чем Продавец отличается от Старшего продавца?»
- «Какие роли дают запись, но не дают проведение?»
По объекту.
- «Кто может изменять справочник Номенклатура?»
- «Кто может проводить реализации?»
- «Каких прав не хватает такому-то, чтобы работать с реализацией?»
По функциональности.
- «У кого есть права на раздел Продажи?»
- «Кто может работать со складом?»
- «У кого доступ к финансам?»

И вот тот самый вопрос безопасника - «каких прав не хватает такому-то, чтобы оформлять реализации» - на который раньше уходил час сравнения ролей, теперь одна фраза в чат. Ответ приходит по моей конкретной базе, с именами объектов и ролей.
Про доверие к ответам скажу отдельно, потому что вопрос «а не выдумает ли она» звучит первым. Модель здесь не фантазирует на тему прав - она считает по таблицам из файла, и любую строку ответа можно проверить глазами: открыл файл, нашёл роль, сверил. Я так и делаю с критичными вещами - ответ про полные права перед отправкой безопаснику сверил с файлом за минуту. Расклад такой: черновую работу (перелопатить сотни строк и найти нужное) делает модель, контроль остаётся за тобой. Это сильно отличается от «спросить у чата про 1С вообще», где он охотно сочиняет несуществующие галочки.
Было и стало
Не буду делать вид, что это волшебная таблетка, но контраст честный.
- Было: полдня, а то и целый день на один аудит - конфигуратор, Excel, сверки, подсветка цветом, и всё равно ощущение, что где-то что-то упустил.
- Стало: минут пятнадцать на формирование файла и разговор с чатом. И, что важнее, я перестал бояться уточняющих вопросов - раньше каждый новый вопрос означал новый заход в конфигуратор, теперь это просто ещё одна фраза.
Но главный выигрыш даже не в минутах. Аудит прав обычно нужен не разработчику, а руководителю, безопаснику, внедренцу - людям, которым неудобно оперировать именами объектов метаданных. С файлом в чате они спрашивают так, как думают: «кто может менять цены», «у кого доступ к деньгам», - а перевод на РегистрСведений.ЦеныНоменклатуры и РегистрНакопления.ДенежныеСредства нейросеть берёт на себя, потому что синонимы и комментарии ролей лежат в том же файле.
Что нашлось в процессе (бонус, которого я не ждал)
Когда я первый раз скормил чату полный анализ по своей базе, нейросеть сходу вытащила то, что руками я искал бы долго. Во-первых, пары ролей вида «ЧтениеПродаж» и «ДобавлениеИзменениеПродаж»: одна на чтение, вторая на запись того же участка, и в реальных назначениях они почти всегда идут вместе. Во-вторых, целую пачку ролей-переключателей подсистем: по правам на объекты они между собой неотличимы, потому что открывают доступ не к данным, а к разделам интерфейса. Модель назвала их одним списком - и стало видно, что десяток ролей делает одно и то же.
Дальше это уже превращается в решения. Роль, которая даёт запись, но которую никому не назначили, - кандидат на удаление. Пользователь, у которого ролей больше, чем у коллег на том же участке, - повод спросить, зачем ему это. Ничего из этого нейросеть не выдумывает: она отвечает по фактам из файла, а факты собрала обработка.
Описание обработки и как ей пользоваться
Для чего предназначена. Обработка выгружает данные о правах доступа конфигурации 1С в один текстовый Markdown-файл, заточенный под нейросети. Дальше файл загружается в чат, и вопросы о правах задаются обычным языком. Это инструмент для аудита прав, ревизии ролей и поиска того, что можно упростить.
Что именно выгружает.
- Роли конфигурации - имя, синоним, комментарий.
- Пользователей информационной базы и назначенные им роли.
- Матрицу «роль - право» по выбранным объектам (чтение, добавление, изменение, удаление, проведение).
- Полный анализ: профиль каждой роли, что она может изменять, и группы эквивалентных ролей - кандидаты на объединение.
- В начало файла - короткую инструкцию для модели, чтобы нейросеть сама подсказала, о чём её можно спросить.
Как пользоваться.
- Открыть обработку в своей базе.
- При необходимости отметить галочками, что включать (пользователи, полный анализ), и вписать объекты для матрицы по фокусу. По умолчанию всё уже настроено разумно.
- Нажать «Сформировать» - файл сразу предлагается сохранить на компьютер.
- Загрузить файл в чат с нейросетью и задавать вопросы словами.
На каких конфигурациях и платформах тестировалась. Обработка универсальна: роли и пользователи есть в любой конфигурации, ничего типового она не требует. Всё читается штатными платформенными методами - Метаданные.Роли, ПравоДоступа, ПользователиИнформационнойБазы.ПолучитьПользователей. Управляемые формы, обычное и управляемое приложение, любая платформа 8.3. Проверялась на Рознице для Казахстана 2.2 (реальная база, 326 ролей) на платформе 8.3.27; сборка открывается и более старыми версиями 8.3.
Ограничения.
- Полная матрица по всей конфигурации сразу - это сотни ролей на тысячи объектов, миллионы проверок и файл, который не влезет в окно чата. Поэтому по конкретным объектам матрица строится отдельно, по фокусу. Полный анализ по всем объектам работает, но на большой базе занимает до пары минут, поэтому его можно отключить и получить роли с пользователями за секунду.
- Права сравниваются на уровне объектов метаданных. Ограничения на уровне записей (RLS), права на отдельные реквизиты и команды в выгрузку не попадают - и эквивалентность ролей считается без их учёта. Две роли с одинаковыми правами на объекты, но разными RLS-шаблонами обработка покажет как эквивалентные, так что перед физическим объединением ролей RLS проверяйте в конфигураторе.
- В выгрузку попадают имена ролей и пользователей вашей базы. Прежде чем нести файл во внешний чат, посмотрите, нет ли в именах пользователей чего-то чувствительного, и решайте по своей политике безопасности. Имена ролей - это структура конфигурации, а вот список сотрудников уже стоит оценить.
- Обработка только читает. Она ничего не пишет в базу и никуда сама не отправляет: сформировала файл - и файл остаётся у вас. Код открыт.
Выводы
Права доступа читаются из встроенного языка - у ПравоДоступа третьим аргументом принимается роль, и матрица собирается прямо в работающей базе, без конфигуратора. Для меня это было открытием, хотя функция лежала под носом всегда.
А дальше просто: выгрузил права в Markdown, отдал нейросети - и аудит из раскопок превратился в разговор. Спрашиваешь словами, отвечает по твоей базе, критичное сверяешь с файлом. Бонусом сразу видно, где ролей наплодили лишнего и что можно схлопнуть.
Я не обещаю, что вы полюбите аудит прав. Но, кажется, бояться пятничных сообщений от безопасника вы перестанете. Я вот перестал.
Скачать обработку: Матрица прав доступа 1С для нейросети.
Когда баз много. Здесь права выгружаются из одной базы. На контуре из десяти баз в трёх странах тот же вопрос задаётся сразу всем, и отвечает на него один узел: Один MCP управляет десятью базами. В самих базах MCP нет.
Другие наши инструменты для 1С и нейросетей:
- Выгрузка структуры метаданных для нейросети - объясняет модели устройство базы: таблицы, реквизиты, готовые имена для запросов.
- Анонимизатор выгрузки - обезличивает данные перед отправкой в чат и расшифровывает ответ обратно.
Вступайте в нашу телеграмм-группу Инфостарт