В процессе разработки на платформе 1С, особенно при использовании «Библиотеки стандартных подсистем» (БСП), программисты часто сталкиваются с необходимостью анализа прав доступа. Одним из ключевых инструментов для этого в БСП является регистр сведений ПраваРолей. Однако нередко возникает ситуация: вы создали новую роль, назначили ей права, но в регистре информация не появляется или отображается не полностью (например, отсутствуют отчеты или константы). Рассмотрим детально, как работает этот механизм, почему он ведет себя именно так и что нужно сделать для получения достоверных данных.
Для начала разберем, зачем этот регистр вообще нужен в системе. Важно понимать, что ПраваРолей — это служебный регистр подсистемы «Управление доступом». Он не является «зеркалом» всех прав, настроенных в конфигураторе. Его основная задача — оптимизация работы механизмов RLS (ограничение доступа на уровне записей).
Проанализируем ситуацию: если бы система при каждом запросе данных с RLS обращалась напрямую к метаданным и анализировала сложные цепочки прав, производительность бы критически упала. БСП кэширует данные о правах в этот регистр, чтобы быстро определять, имеет ли роль доступ к конкретной таблице базы данных. Именно поэтому в регистр попадают только те объекты, которые могут участвовать в ограничениях доступа. К ним относятся:
Такие объекты, как Константы, Отчеты и Обработки, не предполагают использования RLS в стандартной логике БСП, поэтому они намеренно исключены из процесса заполнения этого регистра для экономии дискового пространства и ускорения работы системы.
Если вы добавили права на «ссылочные» объекты (например, справочники или документы), но записи в регистре не появились, попробуем выполнить обновление вспомогательных данных. Рассмотрим основные способы:
ПраваРолей. В меню «Еще» найдите пункт «Обновить данные регистра». Это действие запустит фоновое задание, которое пересчитает права для используемых в системе ролей./C ЗапуститьОбновлениеИнформационнойБазы. Это инициирует выполнение всех процедур обновления, прописанных в модулях БСП.
ОбновлениеИнформационнойБазыБСП.ПринудительноОбновитьДанныеРегистраПраваРолей();
// Также можно обновить идентификаторы метаданных
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
Важное наблюдение: как показывает практика, если у роли есть права только на константы или отчеты, она может вообще не попасть в регистр. Стоит добавить право «Чтение» хотя бы на один технический справочник или документ, и после обновления роль появится в списке.
Выясним причину странного поведения: в регистре ПраваРолей записей нет, а одноименный отчет в подсистеме администрирования выводит полную информацию, включая константы. Это происходит потому, что отчет использует комбинированный алгоритм:
ПравоДоступа(), обращаясь к метаданным «на лету».Если ваша задача — провести аудит, выполнить качественный анализ прав и ролей и увидеть полную матрицу прав, используйте именно отчет, а не делайте запрос напрямую к регистру сведений.
Если вы разрабатываете собственную систему анализа прав и заполняемость регистра в 90-95% вас не устраивает, проанализируем, как реализовать проверку самостоятельно. Правильным подходом будет использование объекта Метаданные и функции ПравоДоступа.
Рассмотрим пример кода, который обходит все роли и проверяет права на конкретный тип объектов (например, константы):
Для Каждого ТекущаяРоль Из Метаданные.Роли Цикл
ИмяРоли = ТекущаяРоль.Имя;
Для Каждого Константа Из Метаданные.Константы Цикл
// Проверяем право на чтение константы для конкретной роли
Если ПравоДоступа("Чтение", Константа, ТекущаяРоль) Тогда
// Записываем результат в свою таблицу или лог
Сообщить("Роль: " + ИмяРоли + " имеет доступ к константе: " + Константа.Имя);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для отчетов и обработок вместо права "Чтение" следует проверять право "Использование" или "Просмотр", в зависимости от ваших целей. Такой обход гарантирует 100% достоверность, так как данные берутся напрямую из конфигурации, минуя любые промежуточные кэширующие регистры.
Подведем итог нашему исследованию:
ПраваРолей — это вспомогательный инструмент для RLS, а не полная база прав.Отчетов, Обработок и Констант — это нормальное поведение, заложенное разработчиками БСП (модуль УправлениеДоступомСлужебный).Метаданные с проверкой через ПравоДоступа().Понимая эти внутренние механизмы платформы и БСП, вы сможете эффективно настраивать безопасность системы и избегать лишних затрат времени на поиск «пропавших» данных в служебных регистрах.