Главная DISCLAIMER Ссылки Карта сайта Контакты
Главная arrow Вопросы разработки arrow Разграничение доступа arrow Раздельный защищённый период для каждого пользователя
Раздельный защищённый период для каждого пользователя

Итак, исходные данные (получены экпериментальным путём):

  1. Защищённый период хранится в строке таблицы SYS_PARAMS, даты начала и окончания защищённого периода одинаковы для всех пользователей.
  2. Значение даты начала и окончания защищённого периода читается из SYS_PARAMS только при старте приложения Акцент и по команде VBScript RefreshPeriod.
  3. Для защиты от изменения документа используется только это, однажды прочитанное значение.

Из которых следует:

  1. Фактически, защищённый период у каждого запущенного экземпляра приложения свой. Он однажды прочитан из базы данных при старте программы и хранится в системных переменных до перезапуска или изменения периода из интерфейса именно этого экземпляра приложения.
  2. Защищённый период можно прочитать из БД SQL-запросом и установить для локального пользователя командой workarea.RefreshPeriod.

Что делаем:

  1. Заводим набор переменных в базе данных, содержащих периоды для каждого пользователя или группы. Их удобно хранить в UserParams.
  2. Пишем диалог, который управляет этими переменными. Доступ к административной части диалога будет только у ответственных лиц.
  3. Устанавливаем запрет ВСЕМ пользователям менять защищённый период стандартными срествами. [Будет приведен скрипт].
  4. Пишем общую для всех процедуру чтения разрешённого периода, выполняемую при открытии пользователем программы или по команде пользователя "обновить разрешённый период". Вызываться она будет по событию workarea_OnLoad
  5. В таблице SYS_PARAMS хранится самый безвредный период, который подменяется в ней на реальный период пользователя только на время выполнения нашей процедуры - при входе пользователя в Акцент или при принудительном обновлении им периода.

Для избежания проблемы подхвата чужого периода при одновременном старте нескольких пользователей в конце процедуры входа проверяем соответствие установившегося для локального приложения периода защиты заданному в UserParams для локального пользователя. Кажется, здесь даже "гонки" невозможны в принципе - если они и возникнут, "правильные" пользователи будут выходить по одному из гонок. Есть также вариант хранить в таблицах флаг о том, что данные о запрещённом периоде в таблице SYS_PARAMS в данный момент предназначены только для того пользователя, который их установил.