Пример разграничения прав доступа
SYSDBA (обсуждение | вклад) (→Шаг 4. Программируем назначение прав доступа для менеджеров) |
SYSDBA (обсуждение | вклад) (→Шаг 5. Тестируем созданную схему) |
||
| Строка 161: | Строка 161: | ||
* Подключимся под учетной записью Петров П П и убедимся, что менеджер видит только свои счета фактуры. | * Подключимся под учетной записью Петров П П и убедимся, что менеджер видит только свои счета фактуры. | ||
* Аналогичным образом проверим менеджера из группы Б. | * Аналогичным образом проверим менеджера из группы Б. | ||
| + | |||
| + | [[Category:Учебный курс]] | ||
Текущая версия на 11:13, 12 ноября 2009
Решим такую задачу:
- На предприятии выделены группы пользователей: Директор, Бухгалтерия, Менеджеры А, Менеджеры Б.
- Менеджеры выписывают счета-фактуры, но так, что каждая группа менеджеров видит только документы своей группы.
- Бухгалтера видят все счета-фактуры и могут вносить в них изменения.
- Директор может только просматривать счета-фактуры, но не может их изменять.
Напомним, что настройку прав доступа и программирование на Гедымине следует осуществлять под учетной записью Administrator.
Содержание |
[править] Шаг 1. Создаем группы пользователей
- Вызываем команду Исследователь-Сервис-Администратор-Группы пользователей.
- Выбираем команду Добавить. На экране откроется диалоговое окно.
- Вводим наименование группы Директор.
- Запоминаем идентификатор группы (в нашем случае 7, у вас идентификатор может отличаться!).
- Нажимаем кнопку Ок.
- Повторяем действия для создания групп Бухгалтерия, Менеджеры А, Менеджеры Б.
У нас получились следующие идентификаторы:
Еще раз обращаем ваше внимание, на то, что в вашем случае идентификаторы групп могут отличаться!
[править] Шаг 2. Создаем учетные записи пользователей и назначаем им группы
Учетные записи пользователей создаются в окне Исследователь-Сервис-Администратор-Пользователи. Для учебных целей мы создадим четыре записи: Директор -- Сидорский А.А., Бухгалтер -- Иванова И.И., Менеджер А -- Петров П.П. и Менеджер Б -- Сидоров С.С.
- Воспользуемся командой Добавить и откроем на экране диалоговое окно.
- Заполним поля: Наименование, Пароль, Подтверждение пароля.
- Каждой учетной записи должна быть поставлена в соответствие запись в справочнике контактов. Для ее создания, установим курсор в поле контакт и нажмем F2. На экране появится окно выбора типа создаваемого объекта:
- Укажем "Сотрудник предприятия".
- В диалоговом окне заполним поля Фамилия, Имя, Отчетство.
- Для объекта типа "Сотрудник предприятия" обязательно должны быть заполнена поля "Рабочая организация" и "Подразделение". Если нужного объекта нет в выпадающем списке, его всегда можно создать с помощью клавиши F2.
- Сохраняем запись в справочнике Сотрудников предприятия (контактов).
- Теперь укажем группы для создаваемого пользователя. Воспользуемся кнопкой Группы... в правой части окна.
- С помощью кнопки Включить добавим в список две группы: Директор и Пользователи. с помощью кнопки Исключить уберем из списка позицию Администраторы. В конечном итоге мы должны получить такую картину:
- Аналогичным образом создадим пользователей Иванова, Петров и Сидоров, включив их в соответствующие группы.
По поводу назначения групп необходим комментарий. Мы исключали каждого пользователя из группы Администраторы, так как последние всегда имеют доступ ко всем функциям системы и записям в базе данных. Мы включали пользователей в группу Пользователи для того, чтобы предоставить базовый доступ к командам Исследователя. В принципе, можно было бы обойтись и без этого, но тогда пришлось бы настраивать права для созданных групп на основные команды, такие как раздел Справочники, например.
[править] Шаг 3. Настраиваем права для класса объектов Счет-фактура
- В Исследователе найдем раздел Торговля.
- Раскроем его.
- Установим курсор на позицию "04. Счета-фактуры (оптовая торговля)" и по правой кнопке мыши выберем из контекстного меню команду Свойства...
- Перейдем на вкладку Доступ.
- Выберем из выпадающего списка вверху окна "Полный доступ".
- С помощью кнопки "Исключить все" очистим список групп (останется только неудаляемая позиция Администраторы).
- Из выпадающего списка внизу окна выберем "Менеджеры А" и нажмем кнопку "Добавить".
- Аналогичные действия проделаем для группы "Менеджеры Б".
- В итоге, список должен принять такой вид:
- Выбираем из выпадающего списка вверху окна уровень доступа "Просмотр и изменение".
- Добавляем в список группу "Бухгалтерия":
- Последним шагом, выбираем уровень доступа "Только просмотр" и добавляем в список группу Директор:
- Закрываем окно кнопкой Ок.
[править] Шаг 4. Программируем назначение прав доступа для менеджеров
На данном этапе, задача уже почти решена за тем исключением, что менеджеры обеих групп имеют доступ ко всем счетам фактурам в базе данных. Разграничить доступ между группами можно, определив обработчик события BeforePost бизнес объекта. В зависимости от того, к какой группе менеджеров принадлежит текущий пользователь, будем исключать бит противоположной группы из всех трех дескрипторов безопасности документа. Таким образом, лишая ее всех прав на запись.
- Откроем окно со списком счетов-фактур: Исследователь-Торговля-04.Счета-фактуры (оптовая торговля).
- Перейдем в окно.
- С помощью коомбинации клавиш Ctrl-Shift-E переведем окно в режим дизайнера. На экране появятся два дополнительных окна: Палитра компонентов и Инспектор объектов:
- В верхней части Инспектора объектов расположен выпадающий список компонентов формы. Найдем и выберем в нем компонент gdcInvDocument типа TgdcInvDocument:
- Перейдем на вкладку События в окне Инспектора объектов.
- Установим курсор на позицию BeforePost.
- Нажмем кнопку с изображением трех точек.
- Откроется Редактор скрипт объектов.
- Введем следующий код обработчика события:
Option Explicit
Sub gdcInvDocumentBeforePost(ByVal DataSet)
'*** Данный код необходим для вызова встроенного обработчика ***
'*** В случае его удаления возможно нарушение работы системы ***
Call Inherited(DataSet, "BeforePost", Array(DataSet))
'*** конец кода поддержки встроенного обработчика ***
Dim M, ManA_Mask, ManB_Mask
ManA_Mask = CLng(2 ^ (9 - 1)) ' битовая маска группы Менеджеры А
ManB_Mask = CLng(2 ^ (10 - 1)) ' битовая маска группы Менеджеры Б
If (IBLogin.InGroup And ManA_Mask) <> 0 Then
' Если пользователь из группы А, то исключим группу Б
M = Not ManB_Mask
ElseIf (IBLogin.InGroup And ManB_Mask) <> 0 Then
' Если пользователь из группы Б, то исключим группу А
M = Not ManA_Mask
Else
' Если документ ввел не менеджер, то перекроем любой
' доступ к нему менеджерам
M = Not (ManA_Mask + ManB_Mask)
End If
' выключим соответствующие биты из дескрипторов безопасности
DataSet.FieldByName("aview").AsInteger = _
DataSet.FieldByName("aview").AsInteger And M
DataSet.FieldByName("achag").AsInteger = _
DataSet.FieldByName("achag").AsInteger And M
DataSet.FieldByName("afull").AsInteger = _
DataSet.FieldByName("afull").AsInteger And M
End Sub
- Сохраним изменения с помощью команды па панели инструментов Редактора скрипт объектов:
- Закроем Редактор скрипт объектов.
- На палитре компонентов выберем команду "Сохранить и выйти":
[править] Шаг 5. Тестируем созданную схему
- Поочередно подключимся к базе данных под учетными записями Administrator, Петров П П, Сидоров С.С. и создадим под каждой из них по одной счет-фактуре.
- Подключимся под учетной записью Сидорский А. А. и убедимся, что пользователь видит все счета-фактуры, но не может их менять.
- Подключимся под учетной записью Иванова И. И. и убедимся, что бухгалтер видит и может менят все счета-фактуры, но не может их удалять.
- Подключимся под учетной записью Петров П П и убедимся, что менеджер видит только свои счета фактуры.
- Аналогичным образом проверим менеджера из группы Б.