Принудительный вход пользователя через X мин бездействия

У меня есть приложение, которое имеет 1 форму входа в систему, 1 основную форму приборной панели, 7/8 sub dashboard forms и многие другие не основные/dashboard forms.

Я хотел бы реализовать какую-то систему, в которой, если пользователь был неактивен в течение x минут, что они просят войти снова.

Есть ли способ заставить глобальную функцию работать непрерывно, которая будет проверять каждые 60 секунд, требуется ли вход в систему? Очевидным способом является использование on timerсобытия. Однако с таким количеством форм мне пришлось бы добавить вызов к каждой форме и т. д.

Есть ли более простой способ?

1 ответ

  1. Я не думаю, что есть простой способ сделать это.

    Во-первых, мы должны определить, что на самом деле означает «пользователь был неактивен в течение x минут«. Есть несколько вариантов:

    1. Приложение Access не было сфокусированным окном в течение x минут. (Недостаток: потребитель смог бездельничать с применением доступа на фронте, никогда не вызывая потерю фокуса)
    2. Определенная форма не фокусировалась в течение x минут. (Недостаток: вам придется реализовать процедуру проверки для каждой формы в приложении, регистрируя все GotFocusи/или LostFocusсобытия, чтобы проверить, что по крайней мере все x минут другая форма была сосредоточена. Но: пользователь, законно работающий в течение x минут с той же формой, никогда не нуждающийся в изменении своего фокуса, тем не менее вызовет выход.)
    3. За x минут не произошло никакого взаимодействия с пользователем (то есть событий, вызванных щелчками кнопок и так далее). (Недостаток: для каждого события, которое вы обрабатываете, вы должны добавить дополнительный код для сброса x-минут-таймера. Также необходимо ввести новые обработчики событий для naviagtion (см. #2, Focus loss), чтобы не выводить активных пользователей из системы с помощью навигации по формам.)
    4. … другие методы, которые, вероятно, также не будут работать лучше.

    Нет хорошего способа сделать это, не сталкиваясь с массой новых проблем.

    Лучшим решением было бы установить время простоя по умолчанию в вашей серверной базе данных, предполагая, что это активный сервер базы данных, а не просто другая база данных Access (или даже та же база данных, где находятся формы).

    В последнем случае, когда у вас нет выделенного сервера базы данных, я бы предложил вам переосмыслить, почему вы хотите тайм-аут входа в систему в первую очередь. Или, перефразируя:

    Для чего нужен логин в базе данных только для доступа?

    Безопасность? Вы никоим образом не можете запретить пользователю доступ ко всем данным в вашей базе данных, независимо от того, есть у них логин или нет. Помните: база данных Access-это просто файл в файловой системе. Пользователь, использующий эту базу данных, фактически уже имеет доступ ко всему в этом файле. Нет такой вещи, как безопасность на уровне пользователя в доступе (по крайней мере, больше не; и это к лучшему).

    Вы можете зашифровать всю базу данных (файл —> Info), но вы можете указать только один пароль для каждой базы данных, а не для каждого пользователя. Опять же: безопасность на уровне пользователя не может быть выполнена в Access.

    Подробнее о безопасности баз данных Access см. В этом ответе: https://stackoverflow.com/a/530778/6216216