Почему пользователь получает данные из регистра без явных прав доступа?

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

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

Разберем возможные причины доступа

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

  1. Использование привилегированного режима. Это самая частая причина. Если код, выполняющий запрос, находится в серверном модуле с установленным свойством Привилегированный = Истина, или если в коде принудительно вызван метод УстановитьПривилегированныйРежим(Истина), проверка прав доступа к объектам метаданных полностью отключается.
  2. Различие прав «Чтение» и «Просмотр». Часто отчеты по правам в типовых конфигурациях анализируют право Просмотр (возможность видеть объект в списках интерфейса), в то время как для работы запроса достаточно права Чтение. Эти права настраиваются независимо друг от друга в ролях.
  3. Косвенные права через базовые роли. В типовых конфигурациях, таких как 1С:Зарплата и Управление Персоналом, пользователю могут быть назначены технические или базовые роли, которые не отображаются в простых отчетах по профилю, но содержат права на чтение системных регистров.
  4. Ограничение доступа на уровне записей (RLS). Если на регистр настроены шаблоны RLS, право может предоставляться динамически.

Проанализируем программную диагностику

Чтобы понять, что именно происходит в вашем случае, попробуйте проанализировать контекст выполнения запроса. Если данные возвращаются даже без использования ключевого слова РАЗРЕШЕННЫЕ, это означает, что у пользователя есть право Чтение на уровне системы. Если же запрос возвращает данные только внутри определенных функций, стоит проверить наличие вызова привилегированного режима.

Рассмотрим пример того, как программно устанавливается привилегированный режим:


Процедура ПолучитьДанныеРегистра()
    // Устанавливаем привилегированный режим для выполнения операции
    УстановитьПривилегированныйРежим(Истина);
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ПодчиненностьПодразделенийОрганизаций";
    Результат = Запрос.Выполнить().Выгрузить();
    
    // Сбрасываем режим обратно
    УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

Как проверить свои догадки

Для того чтобы докопаться до истины, проделаем следующие шаги:

  1. Проверка прав в Конфигураторе. Откройте роль, назначенную пользователю, и найдите регистр сведений ПодчиненностьПодразделенийОрганизаций. Внимательно изучите установленные флажки в колонках Чтение и Просмотр. Помните, что отсутствие галочки в колонке Просмотр не лишает пользователя возможности считать данные запросом, если стоит галочка в Чтение.
  2. Поиск вызовов кода. Используйте глобальный поиск в конфигураторе (Ctrl+Shift+F), чтобы найти, где именно используется имя данного регистра. Обратите внимание, не вызывается ли этот код внутри процедур, помеченных как Привилегированный в модулях.
  3. Анализ отчетов по правам. Учтите, что стандартные отчеты могут быть неточными при наличии сложных профилей групп доступа. В типовых конфигурациях лучше смотреть отчет Права доступа из состава Библиотеки Стандартных Подсистем (БСП), который корректно учитывает все роли и профили.

Если вы уверены, что явных прав нет, а запрос работает, скорее всего, вы столкнулись с выполнением кода в привилегированном режиме. Это стандартный механизм 1С, позволяющий пользователям получать доступ к служебной информации, которая необходима для работы бизнес-логики, но не должна быть доступна пользователю напрямую через интерфейс (например, для изменения или удаления).

Используйте этот метод анализа для диагностики прав: проверяйте сначала настройки ролей, затем — наличие привилегированного кода, и вы быстро найдете источник «мистических» прав.

← На главную