Способы хранения дополнительной информации о пользователях
Для того чтобы в обработчике события ПроверитьНаличиеКлючейДоступа
выдать экземпляры ключей тем или иным пользователям, как правило, требуется дополнительная информация о пользователях.
Такую дополнительную информацию может вручную предоставить, например, администратор приложения — после подключения пользователя к приложению установить у пользователя те или иные настройки доступа.
Такую информацию можно получить из другой системы в момент выдачи экземпляров ключей. Рассмотрим эти варианты подробнее.
Утверждения — свойство подключенного пользователя
В простейшем случае дополнительную строковую информацию можно хранить в свойстве пользователя Утверждения
. Это соответствие, в котором и ключ, и значение имеют тип Строка
. Например:
// Пользователь1 и Пользователь2 - переменные типа Пользователь.Ссылка
Пользователи.УстановитьУтверждение(Пользователь1, "ЭтоИнформационнаяСистема", "Истина")
Пользователи.УстановитьУтверждение(Пользователь2, "ЭтоАдминистраторАбонента", "Истина")
При выдаче экземпляров ключей достаточно будет проверить значение того или иного утверждения, установленного пользователю:
если Пользователь1.Утверждения.ПолучитьИлиУмолчание("ЭтоИнформационнаяСистема") == "Истина"
// Выдать пользователю экземпляр ключа для информационной системы.
;
«Шина» автоматически выполняет пересчет экземпляров ключей доступа в следующих случаях:
- при создании нового пользователя, если для пользователя заполнено свойство
Утверждения
; - при обновлении пользователя, если изменилось значение свойства
Утверждения
.
Справочник в проекте
В более сложных случаях дополнительная информация может храниться в отдельном справочнике. Например, в проекте существует справочник Подразделения с реквизитом Руководитель типа Пользователи.Ссылка
. В этом реквизите хранится тот подключившийся пользователь, который является руководителем конкретного подразделения. Информацию в этом справочнике обновляет администратор приложения.
Тогда при выдаче экземпляров ключей достаточно будет проверить, есть ли в этом справочнике записи, соответствующие пользователю:
знч Запрос = Запрос{ВЫБРАТЬ
Ссылка
ИЗ
Подразделения
ГДЕ
Руководитель = %Пользователь1}
исп РезультатЗапроса = Запрос.Выполнить()
для СтрокаРезультата из РезультатЗапроса
// Выдать пользователю экземпляр ключа руководителя.
;
Запрос к другой системе
Для получения данных о пользователе приложение может обращаться к другим, сторонним сервисам. Например, так:
// user1 - некоторый индентификатор пользователя, по которому можно получить
// информацию о нем во внешней системе
пер Запрос = КлиентHttp.СБазовымUrl("http://example.com")
.ЗапросGet("user-info?user1")
исп Ответ = Запрос.Выполнить()
пер ДанныеОтвета = JSONВДанные(Ответ.Тело.ПрочитатьКакСтроку())
если ДанныеОтвета["leader"]
// Выдать пользователю экземпляр ключа руководителя.
;