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

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

Справочник Объектов предназначен для
хранения данных об Объектах системы, к которым
можно запретить доступ различным Категориям Сотрудников.
Справочник Объектов имеет вспомогательную роль
и не предназначен для редактирования конечными
пользователями. Для удобства поиска все
Объекты делятся на несколько типов: Справочники,
Документы, Поля, Отчеты
и Пункты Меню
Изменение прав доступа к Объектам системы для данной Категории Сотрудников производится при помощи окна "Запрет доступа к Объектам системы", которое можно вызвать при помощи кнопки "Доступ" в Справочнике Категорий сотрудников:
Для Объектов системы можно запретить следующие действия:
В показанном на рисунке примере для категории "Оператор" запрещены все операции в Справочнике Сотрудников и Справочнике Участков, запрещена операция Удаления записей в Справочнике Организаций и Справочнике Товаров и полностью запрещен доступ еще к пяти Справочникам.
Установка и снятие запретов доступа к Объектам производится путем нажатия соответствующей кнопки со стрелкой в верхней части окна. Рекомендуется не делать никаких ограничений для Администратора системы, иначе можно полностью потерять доступ к каким-либо объектам системы.
В распоряжении программиста имеется функция DostObj(), при помощи которой производится проверка прав доступа данного Сотрудника к данному Объекту. В ней скрыты все обращения к файлам подсистемы разделения доступа. Защищаемые процедуры могут ничего не знать даже о существовании этих файлов, им достаточно обратиться к функции DostObj().
DostObj( Obozn, CurKateg ) - Проверить права доступа к объекту
Obozn - Условное
обозначение объекта в соответствии со
Справочником Объектов.
CurKateg - Категория доступа текущего
пользователя
Возвращает байт прав доступа. Если нет никаких ограничений доступа, то возвращает нуль. Каждый бит в байте возвращаемого значения отвечает за доступ к чему-либо следующим образом:
Для вызова функции DostObj() имеются специальные шаблоны, которые анализируют ее возвращаемое значение и выполняют соответствующие ограничения доступа к объекту:
В Журнал Операций записываются все основные операции с данным Документом или Справочником с указанием даты, времени, выполненной операции и фамилии сотрудника. Журнал Операций представляет собой файл, связанный с файлом Документа или Справочника соотношением "Много к одному". Я предоставляю доступу к записям Журнала Операций на отдельном листе (tab-e) формы записи Документа. Обычно, редактировать записи Журнала Операций имеет право только Администратор.
Система разделения доступа реализована в виде отдельного модуля (DLL), содержащего все ее процедуры. Исходные тексты модуля (Dictionary и Application) можно взять отсюда, вместе с демонстрационным примером реализации системы разделения доступа.