Раздельный защищённый период для каждого пользователя |
Итак, исходные данные (получены экпериментальным путём):
- Защищённый период хранится в строке таблицы SYS_PARAMS, даты начала и окончания защищённого периода одинаковы для всех пользователей.
- Значение даты начала и окончания защищённого периода читается из SYS_PARAMS только при старте приложения Акцент и по команде VBScript RefreshPeriod.
- Для защиты от изменения документа используется только это, однажды прочитанное значение.
Из которых следует:
- Фактически, защищённый период у каждого запущенного экземпляра приложения свой. Он однажды прочитан из базы данных при старте программы и хранится в системных переменных до перезапуска или изменения периода из интерфейса именно этого экземпляра приложения.
- Защищённый период можно прочитать из БД SQL-запросом и установить для локального пользователя командой workarea.RefreshPeriod.
Что делаем:
- Заводим набор переменных в базе данных, содержащих периоды для каждого пользователя или группы. Их удобно хранить в UserParams.
- Пишем диалог, который управляет этими переменными. Доступ к административной части диалога будет только у ответственных лиц.
- Устанавливаем запрет ВСЕМ пользователям менять защищённый период стандартными срествами. [Будет приведен скрипт].
- Пишем общую для всех процедуру чтения разрешённого периода, выполняемую при открытии пользователем программы или по команде пользователя "обновить разрешённый период". Вызываться она будет по событию workarea_OnLoad
- В таблице SYS_PARAMS хранится самый безвредный период, который подменяется в ней на реальный период пользователя только на время выполнения нашей процедуры - при входе пользователя в Акцент или при принудительном обновлении им периода.
Для избежания проблемы подхвата чужого периода при одновременном старте нескольких пользователей в конце процедуры входа проверяем соответствие установившегося для локального приложения периода защиты заданному в UserParams для локального пользователя. Кажется, здесь даже "гонки" невозможны в принципе - если они и возникнут, "правильные" пользователи будут выходить по одному из гонок. Есть также вариант хранить в таблицах флаг о том, что данные о запрещённом периоде в таблице SYS_PARAMS в данный момент предназначены только для того пользователя, который их установил.
|