Динамическая смена пользователя
В некоторых системах, таких как АРМ кассира, терминал официанта в ресторане и т.п., требуется быстрая смена текущего пользователя. В Гедымине для этого предназначен метод ChangeUser глобального объекта IBLogin. Данный метод имеет два параметра:
- AUserKey -- идентификатор нового пользователя, т.е. идентификатор записи в таблице GD_USER;
- ACheckMultipleConnections -- булевский параметр, который определяет: блокировать или нет попытки многократного подключения под одной и той же учетной записью. В случае нарушения условий блокировки генерируется исключение.
Пример вызова:
IBLogin.ChangeUser 154333222, True
Следует учитывать, что данный метод не производит физического переподключения к базе данных, а только обновляет значения внутренних переменных (IBLogin.UserName, IBLogin.UserKey, IBLogin.InGroup и т.п.) и подгружает пользовательское хранилище. В связи с этим на его использование накладываются следующие ограничения:
- Нельзя изменять текущего пользователя на учетную запись Administrator;
- Нельзя вызывать метод ChangeUser, находясь под учетной записью Administrator.
Блокировка многократных подключений производится через холостой апдейт записи пользователя в таблице GD_USER на транзакции, которая будет находиться в активном состоянии до следующего вызова ChangeUser или пока работа программы не будет завершена. Т.е. корректной работы данного механизма блокировки можно добиться только, если множество учетных записей пользователей, под которыми осуществляется вход в систему Гедымин, не пересекается с множеством учетных записей, используемых в вызове метода ChangeUser.