В крупных корпоративных системах, таких как «1С:ERP Управление предприятием» или «1С:Управление холдингом», система прав доступа представляет собой сложную матрицу. Когда количество пользователей превышает несколько тысяч, а количество ролей исчисляется сотнями, возникает типичная ситуация: сотрудник (например, закупщик) видит документ, который видеть не должен (например, расходный кассовый ордер). Перед администратором или программистом встает задача: быстро найти «иголку в стоге сена» — ту самую роль, которая открыла этот доступ, и профиль, в который она включена — для этого подойдёт отчет для поиска ролей по объекту метаданных.
Мы подробно разберем, как решить эту задачу, используя штатные механизмы платформы и Библиотеки Стандартных Подсистем (БСП), а также рассмотрим методы программной диагностики.
Прежде чем искать причину, давайте структурируем понимание того, как права назначаются пользователю в современных конфигурациях. В отличие от простых систем, здесь действует многоступенчатая схема:
Таким образом, наша задача по поиску «утечки» прав делится на три этапа: найти Роль → найти Профиль → найти Группу доступа пользователя — удобнее через инструмент настройки и аудита прав в 1С:ERP.
Многие специалисты сразу идут в Конфигуратор или ищут внешние обработки для поиска ролей и объектов, забывая, что в подсистеме «Управление доступом» уже есть мощные инструменты анализа. Давайте рассмотрим, как ими пользоваться.
В разделе Администрирование — Настройки пользователей и прав (путь может отличаться в зависимости от релиза, часто находится в группе отчетов администратора) существуют два ключевых отчета:
1. Отчет «Права ролей»
Этот отчет позволяет идти «от объекта». Это самый быстрый способ понять, какие роли вообще теоретически могут видеть нужный нам документ.
Мы должны:
ПраваРолей.Система выведет список всех ролей, у которых установлены флаги «Чтение» или «Просмотр» для этого документа. Это позволит нам сузить круг поиска с тысяч ролей до нескольких десятков.
2. Отчет «Анализ прав доступа» — есть универсальный отчет анализа прав доступа и ролей
Этот инструмент позволяет идти «от пользователя». Если мы знаем конкретного «Закупщика», который видит лишнее, мы можем проанализировать именно его.
Алгоритм действий:
Если визуальный анализ отнимает много времени из-за большого объема данных или медленной работы отчетов, мы можем воспользоваться консолью запросов или консолью кода. Программный метод работает практически мгновенно.
Разберем скрипт, который перебирает все роли конфигурации и проверяет их права на конкретный документ. Этот код можно выполнить в любой обработке, поддерживающей выполнение алгоритмов на встроенном языке.
Пример кода для поиска ролей, дающих право чтения документа:
// Укажем имя искомого документа, как оно задано в Конфигураторе
ИмяДокумента = "РасходныйКассовыйОрдер";
ОбъектМетаданных = Метаданные.Документы[ИмяДокумента];
Сообщить("Поиск ролей с правом ЧТЕНИЕ для документа: " + ИмяДокумента);
// Перебираем все роли в метаданных конфигурации
Для Каждого Роль Из Метаданные.Роли Цикл
// Проверяем наличие права "Чтение" у данной роли для нашего документа
// Важно: мы проверяем абстрактную роль, а не права текущего пользователя
Если ПравоДоступа("Чтение", ОбъектМетаданных, Роль) Then
Сообщить("Роль дает доступ: " + Роль.Имя + " (" + Роль.Синоним + ")");
КонецЕсли;
КонецЦикла;
После выполнения этого кода мы получим список ролей. Далее нам останется выяснить, какая из этих ролей есть у нашего пользователя. Для этого можно доработать код, проверяя наличие роли у конкретного пользователя ИБ:
ИскомыйПользователь = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ");
Если ИскомыйПользователь = Неопределено Тогда
Возврат;
КонецЕсли;
// Получаем роли пользователя
РолиПользователя = ИскомыйПользователь.Роли;
Для Каждого Роль Из Метаданные.Роли Цикл
// Если роль есть у пользователя И она дает право на документ
Если РолиПользователя.Содержит(Роль) И ПравоДоступа("Чтение", Метаданные.Документы.РасходныйКассовыйОрдер, Роль) Тогда
Сообщить("У пользователя есть роль: " + Роль.Имя);
КонецЕсли;
КонецЦикла;
Хотя этот метод был упомянут как трудоемкий, иногда он необходим для глубокого анализа, особенно если права выданы неявно.
В окне «Все роли» (All Roles) можно установить фильтр по объектам. Однако в конфигурациях уровня ERP это может работать медленно. Важный нюанс при работе с конфигуратором:
Учитывайте расширения конфигурации!
Частая ошибка: мы ищем роль в основной конфигурации, а право доступа предоставлено заимствованной ролью или новой ролью из расширения. В свойствах пользователя в режиме Предприятия такие роли могут отображаться, но в конфигураторе основной поставки их не видно. Обязательно проверяйте состав ролей в подключенных расширениях.
Бывает ситуация, когда мы нашли роль, убрали ее, а пользователь перестал работать, потому что роль была нужна для других задач. Или обратная ситуация: роль есть («Чтение»), но пользователь не должен видеть все документы, а только свои.
Если пользователь видит документ, который видеть не должен, но сама роль ему необходима, проблему нужно решать через RLS (Record Level Security).
Давайте проверим следующие моменты:
ЧтениеДанныхБухгалтерии без ограничений? В ERP УХ часто существуют дублирующие роли: одна с RLS (например, ЧтениеЗаявокНаОплатуПоПодразделениям), а другая без (просто ЧтениеЗаявокНаОплату). Если пользователю выданы обе — сработает та, что дает больше прав (доступ по «ИЛИ»).Сообщество 1С разработало множество удобных отчетов (например, Анализ прав доступа к объекту (поможет детальный отчет анализа прав и ограничений RLS) или комплексное Управление правами доступа), которые можно найти на профильных ресурсах. Они удобны тем, что часто объединяют функционал поиска роли, профиля и группы доступа в одном окне, строя наглядную таблицу пересечений.
Их использование оправдано, если:
Чтобы закрыть нежелательный доступ, выполним следующие шаги: