Где в типовых конфигурациях хранятся значения прав на объекты и как настроить минимальный доступ

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

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

Анализируем природу регистра ПраваРолей

Для начала проанализируем, почему регистр ПраваРолей кажется неполным. Важно понимать, что этот регистр не является первичным источником истины для платформы 1С:Предприятие. Это вспомогательный кеш, созданный разработчиками БСП для оптимизации работы подсистемы «Управление доступом».

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

Метаданные как единственный достоверный источник

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

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


Функция ЕстьПравоНаОбъект(ИмяРоли, ТипОбъекта, ИмяОбъекта, ИмяПрава = "Чтение")
    
    МетаДанныеРоли = Метаданные.Роли[ИмяРоли];
    ОбъектМетаданных = Метаданные[ТипОбъекта][ИмяОбъекта];
    
    Возврат ПравоДоступа(ИмяПрава, ОбъектМетаданных, МетаДанныеРоли);
    
КонецФункции

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

Проблема программных проверок через РольДоступна

Часто при создании пользователя с минимальными правами мы сталкиваемся с тем, что система выдает ошибки доступа даже при наличии прав на объекты. Разберем, почему это происходит. В типовых решениях (ERP, УТ, КА) разработчики часто используют конструкцию РольДоступна() прямо в программном коде для проверки логики бизнес-процессов.

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

Пошаговая стратегия создания пользователя с минимальными правами

Рассмотрим проверенный на практике алгоритм настройки доступа для пользователя, который должен видеть минимум функционала, но при этом иметь возможность запустить систему без ошибок.

  1. Назначаем базовые роли: В любой типовой конфигурации на базе БСП обязательными являются роли типа ЗапускТонкогоКлиента и БазовыеПрава (в некоторых версиях БазовыеПраваБСП или БазовыеПраваСети). Без них система не сможет инициализировать параметры сеанса.
  2. Анализ необходимых констант: Для успешного старта системе требуются права на чтение таких констант, как ПараметрыРаботыКлиентаПриЗапуске, ИспользоватьРазделениеПоОбластям и ВерсияДанныхИнформационнойБазы.
  3. Итерационное тестирование: Запускаем систему под созданным пользователем в режиме отладки. При возникновении ошибки доступа смотрим, к какому объекту идет обращение.
  4. Поиск роли через конфигуратор: Открываем конфигуратор, находим нужный объект, нажимаем правую кнопку мыши — «Дополнительно» — «Права». В открывшемся окне «Все роли» ищем ту типовую роль, в которой установлено право только на «Чтение» или «Просмотр» этого объекта, и добавляем её пользователю.

Инструменты для упрощения работы с правами

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

1. Инструменты разработчика (ИР): В составе консоли «Инструменты разработчика» (авторства Александра Орефкова и других) есть мощная обработка «Анализ прав доступа». Она позволяет строить наглядные таблицы, фильтровать роли по объектам и видеть реальную картину прав без привязки к кешированным регистрам.

2. Стандартные отчеты БСП: В разделе «Администрирование» — «Настройки пользователей и прав» — «Отчеты по правам доступа» можно найти отчет «Права ролей профиля». Он позволяет увидеть совокупные права, которые дает тот или иной профиль доступа.

3. Программный обход коллекции Метаданные: Рассмотрим пример кода, который поможет нам быстро найти все роли, имеющие доступ к конкретной обработке, и вывести их в консоль:


Процедура НайтиРолиСДоступомКОбъекту(ТипОбъекта, ИмяОбъекта)
    
    Для Каждого Роль Из Метаданные.Роли Цикл
        Если ПравоДоступа("Использование", Метаданные[ТипОбъекта][ИмяОбъекта], Роль) Тогда
            Сообщить("Доступ к объекту " + ИмяОбъекта + " есть в роли: " + Роль.Имя);
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Подведем итог

Мы выяснили, что данные в регистре ПраваРолей — это лишь верхушка айсберга, оптимизированная под задачи RLS. Для полноценной работы с правами на константы, отчеты и обработки необходимо обращаться к объекту Метаданные.Роли. При создании минимальных прав всегда начинайте с назначения БазовыхПрав и добавляйте типовые роли итерационно, анализируя ошибки доступа при запуске. Это позволит вам сохранить работоспособность программных проверок РольДоступна() и обеспечит стабильную работу конфигурации.

← На главную