Разделение доступа к частям приложения

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

Основные положения  системы разделения доступа:

Для реализации такой системы разделения доступа в программу введены следующие файлы:

 

Справочник Сотрудников

В Справочнике Сотрудников содержится информация о каждом Сотруднике, включая его Код, Фамилию Имя Отчество, login, пароль и Категорию.   В окне регистрации, появляющимся при запуске программы, пользователь должен ввести свое регистрационное имя (login) и пароль.  Эти данные проверяются по Справочнику Сотрудников, и если они введены правильно, то производится запуск программы, а Код сотрудника запоминается в глобальной переменной G:SCode

Справочник Категорий сотрудников

KatMOL_t.gif (4996 bytes)

С каждой Категорией сотрудников связан Список прав Доступа к различным Объектам системы.   Объектами системы могут быть Документы, Справочники, пункты Меню, Отчеты  и даже отдельные Поля. 

Справочник Объектов доступа

 Object_t.gif (12513 bytes)

Справочник Объектов предназначен для хранения данных об Объектах системы, к которым можно запретить доступ различным Категориям Сотрудников.  Справочник Объектов имеет вспомогательную роль и не предназначен для редактирования конечными пользователями.  Для удобства поиска все Объекты делятся на несколько типов: Справочники, Документы, Поля, Отчеты и Пункты Меню

Справочник полномочий Доступа

Изменение прав доступа к Объектам системы для данной Категории Сотрудников производится  при помощи окна "Запрет доступа к Объектам системы", которое можно вызвать при помощи кнопки "Доступ"  в Справочнике Категорий сотрудников:

DostObj.gif (13295 bytes)

Для Объектов системы можно запретить следующие действия:

В показанном  на рисунке примере для категории "Оператор" запрещены все операции  в Справочнике Сотрудников и Справочнике Участков, запрещена операция  Удаления записей в Справочнике Организаций и Справочнике Товаров и полностью запрещен доступ еще к пяти Справочникам. 

Установка и снятие запретов доступа к Объектам производится путем нажатия соответствующей кнопки со стрелкой в верхней части окна.   Рекомендуется не делать никаких ограничений для Администратора системы, иначе можно полностью потерять доступ к каким-либо объектам системы.

В распоряжении программиста имеется функция DostObj(), при помощи которой производится проверка прав доступа данного Сотрудника к данному Объекту.  В ней скрыты все обращения к файлам подсистемы разделения доступа.  Защищаемые процедуры могут ничего не знать даже о существовании этих файлов, им достаточно обратиться к функции DostObj().

DostObj( Obozn, CurKateg )   -   Проверить права доступа к объекту

Obozn       - Условное обозначение объекта в соответствии со Справочником Объектов.
CurKateg - Категория доступа текущего пользователя

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

Для вызова функции DostObj() имеются специальные шаблоны, которые анализируют ее возвращаемое значение и выполняют соответствующие ограничения доступа к объекту:

 

Журнал Операций с Документами и Справочниками

В Журнал Операций записываются все основные операции с данным Документом или Справочником с указанием даты, времени,   выполненной операции и фамилии сотрудника.  Журнал Операций представляет собой файл, связанный с файлом Документа или Справочника соотношением "Много к одному".  Я предоставляю доступу к записям Журнала Операций на отдельном листе (tab-e) формы записи Документа.   Обычно, редактировать записи Журнала Операций имеет право только Администратор.

Система разделения доступа реализована в виде отдельного модуля (DLL), содержащего все ее процедуры.  Исходные тексты модуля (Dictionary и Application) можно взять отсюда, вместе с демонстрационным примером реализации системы разделения доступа.

Hosted by uCoz