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