Зачастую разработчики 1С сталкиваются с ситуацией, когда запрос к объекту базы данных (например, регистру сведений) успешно выполняется для пользователя, у которого, судя по отчету «Права доступа», нет прав на этот объект. Это кажется мистикой, но на практике всегда имеет логическое обоснование в архитектуре платформы 1С. Рассмотрим подробнее, почему так происходит и как провести диагностику.
Если запрос к объекту проходит успешно, значит, на момент выполнения кода платформа «видит» у пользователя необходимые права. Разберем основные причины, которые могут приводить к такому поведению:
Привилегированный = Истина, или если в коде принудительно вызван метод УстановитьПривилегированныйРежим(Истина), проверка прав доступа к объектам метаданных полностью отключается.Просмотр (возможность видеть объект в списках интерфейса), в то время как для работы запроса достаточно права Чтение. Эти права настраиваются независимо друг от друга в ролях.1С:Зарплата и Управление Персоналом, пользователю могут быть назначены технические или базовые роли, которые не отображаются в простых отчетах по профилю, но содержат права на чтение системных регистров.Чтобы понять, что именно происходит в вашем случае, попробуйте проанализировать контекст выполнения запроса. Если данные возвращаются даже без использования ключевого слова РАЗРЕШЕННЫЕ, это означает, что у пользователя есть право Чтение на уровне системы. Если же запрос возвращает данные только внутри определенных функций, стоит проверить наличие вызова привилегированного режима.
Рассмотрим пример того, как программно устанавливается привилегированный режим:
Процедура ПолучитьДанныеРегистра()
// Устанавливаем привилегированный режим для выполнения операции
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ПодчиненностьПодразделенийОрганизаций";
Результат = Запрос.Выполнить().Выгрузить();
// Сбрасываем режим обратно
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Для того чтобы докопаться до истины, проделаем следующие шаги:
ПодчиненностьПодразделенийОрганизаций. Внимательно изучите установленные флажки в колонках Чтение и Просмотр. Помните, что отсутствие галочки в колонке Просмотр не лишает пользователя возможности считать данные запросом, если стоит галочка в Чтение.Ctrl+Shift+F), чтобы найти, где именно используется имя данного регистра. Обратите внимание, не вызывается ли этот код внутри процедур, помеченных как Привилегированный в модулях.Права доступа из состава Библиотеки Стандартных Подсистем (БСП), который корректно учитывает все роли и профили.Если вы уверены, что явных прав нет, а запрос работает, скорее всего, вы столкнулись с выполнением кода в привилегированном режиме. Это стандартный механизм 1С, позволяющий пользователям получать доступ к служебной информации, которая необходима для работы бизнес-логики, но не должна быть доступна пользователю напрямую через интерфейс (например, для изменения или удаления).
Используйте этот метод анализа для диагностики прав: проверяйте сначала настройки ролей, затем — наличие привилегированного кода, и вы быстро найдете источник «мистических» прав.