Главная DISCLAIMER Ссылки Карта сайта Контакты
Главная 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 в данный момент предназначены только для того пользователя, который их установил.