Перейти к основному содержимому

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

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

Такую дополнительную информацию может вручную предоставить, например, администратор приложения — после подключения пользователя к приложению установить у пользователя те или иные настройки доступа.

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

Утверждения — свойство подключенного пользователя

В простейшем случае дополнительную строковую информацию можно хранить в свойстве пользователя Утверждения. Это соответствие, в котором и ключ, и значение имеют тип Строка. Например:

// Пользователь1 и Пользователь2 - переменные типа Пользователь.Ссылка
Пользователи.УстановитьУтверждение(Пользователь1, "ЭтоИнформационнаяСистема", "Истина")
Пользователи.УстановитьУтверждение(Пользователь2, "ЭтоАдминистраторАбонента", "Истина")

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

если Пользователь1.Утверждения.ПолучитьИлиУмолчание("ЭтоИнформационнаяСистема") == "Истина"
// Выдать пользователю экземпляр ключа для информационной системы.
;

«Шина» автоматически выполняет пересчет экземпляров ключей доступа в следующих случаях:

  • при создании нового пользователя, если для пользователя заполнено свойство Утверждения;
  • при обновлении пользователя, если изменилось значение свойства Утверждения.

Справочник в проекте

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

Тогда при выдаче экземпляров ключей достаточно будет проверить, есть ли в этом справочнике записи, соответствующие пользователю:

знч Запрос = Запрос{ВЫБРАТЬ
Ссылка
ИЗ
Подразделения
ГДЕ
Руководитель = %Пользователь1}

исп РезультатЗапроса = Запрос.Выполнить()
для СтрокаРезультата из РезультатЗапроса
// Выдать пользователю экземпляр ключа руководителя.
;

Запрос к другой системе

Для получения данных о пользователе приложение может обращаться к другим, сторонним сервисам. Например, так:

// user1 - некоторый индентификатор пользователя, по которому можно получить
// информацию о нем во внешней системе
пер Запрос = КлиентHttp.СБазовымUrl("http://example.com")
.ЗапросGet("user-info?user1")
исп Ответ = Запрос.Выполнить()
пер ДанныеОтвета = JSONВДанные(Ответ.Тело.ПрочитатьКакСтроку())
если ДанныеОтвета["leader"]
// Выдать пользователю экземпляр ключа руководителя.
;