Как настроить доступ к пользователям информационной базы в 1С без прав администратора

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

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

Выясняем причину ошибки: почему прав на справочник недостаточно

Часто начинающие разработчики полагают, что если у роли есть полные права на справочник Справочник.Пользователи, то программный доступ к списку пользователей ИБ будет разрешен автоматически. Это заблуждение. Проанализируем ситуацию: справочник — это объект конфигурации, хранящийся в базе данных, а список пользователей информационной базы — это платформенный механизм, управляющий аутентификацией.

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

Решение 1: Использование привилегированного режима

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

Важное условие: метод УстановитьПривилегированныйРежим(Истина) работает только на стороне сервера или в модулях с установленным флагом "Привилегированный". На клиенте этот метод не окажет никакого влияния.

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


Функция ПолучитьДанныеПользователяИБ(ИмяПользователя) Экспорт
    
    // Включаем привилегированный режим для обхода ограничений прав
    УстановитьПривилегированныйРежим(Истина);
    
    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
    
    Если ПользовательИБ <> Неопределено Тогда
        // Возвращаем структуру с нужными данными, так как сам объект 
        // ПользовательИнформационнойБазы может быть недоступен вне этого режима
        Результат = Новый Структура;
        Результат.Вставить("ПолноеИмя", ПользовательИБ.ПолноеИмя);
        Результат.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор);
        Возврат Результат;
    КонецЕсли;
    
    Возврат Неопределено;
    
КонецФункции

Посмотрим на этот подход внимательнее: мы инкапсулировали опасную операцию внутри серверного вызова. Пользователь по-прежнему не имеет прав администратора, но программа временно "повышает" свои полномочия для выполнения конкретной задачи поиска.

Решение 2: Работа через Библиотеку стандартных подсистем (БСП)

Если мы работаем в современной конфигурации (УТ 11, ERP, БП 3.0), то прямое обращение к ПользователиИнформационнойБазы считается плохим тоном. В БСП реализована мощная подсистема управления пользователями, которая уже берет на себя все сложности с правами доступа.

Проанализируем преимущества использования программного интерфейса (API) БСП:

  1. Синхронизация данных: БСП автоматически дублирует важные данные из ИБ в справочник Пользователи и связанные регистры сведений.
  2. Готовые функции: Вам не нужно изобретать велосипед и писать УстановитьПривилегированныйРежим самостоятельно.
  3. Безопасность: Методы БСП возвращают только те данные, которые разрешено видеть пользователю, не раскрывая хеши паролей или настройки безопасности.

Пример получения данных через БСП:


// Вместо поиска в пользователях ИБ, ищем ссылку в справочнике
ПользовательСсылка = Пользователи.ПользовательИБ(ИмяПользователя);

// Или получаем описание пользователя целиком
ОписаниеПользователя = Пользователи.ДанныеПользователя(ПользовательСсылка);

Решение 3: Поиск по уникальному идентификатору (UUID)

Рассмотрим ситуацию, когда имя пользователя может измениться (например, при смене фамилии). Использование НайтиПоИмени в коде может привести к ошибкам в будущем. Проанализируем более надежный способ идентификации — использование УникальныйИдентификатор.

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


Идентификатор = ПользовательОбъект.ИдентификаторПользователяИБ;
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор);

Этот метод работает быстрее и надежнее, так как идентификатор никогда не меняется в течение "жизни" пользователя в системе.

Анализ ошибок через Журнал регистрации

Если даже при использовании привилегированного режима ошибка доступа сохраняется, нам необходимо выяснить точную причину. Для этого воспользуемся Журналом регистрации.

Посмотрим на типичный алгоритм отладки:

  1. Воспроизведите ошибку под пользователем с ограниченными правами.
  2. Зайдите в базу под правами администратора.
  3. Откройте Журнал регистрации и установите фильтр по событию "Отказ в доступе".
  4. В поле "Данные" платформа часто указывает конкретный ресурс. Например, может выясниться, что ошибка возникает не на самом поиске пользователя, а на обращении к его свойству Роли.

Важное примечание: Если база работает в режиме разделения данных (например, в облаке 1С:Fresh), прямой доступ к списку пользователей ИБ может быть полностью заблокирован на уровне платформы для всех пользователей, кроме администратора сервиса. В этом случае работа через справочники-дублеры является единственным возможным вариантом.

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

Для настройки корректного доступа к данным пользователей информационной базы мы рекомендуем придерживаться следующей стратегии:

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

← На главную