Пример разграничения прав доступа

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Шаг 4. Программируем назначение прав доступа для менеджеров)
(Шаг 5. Тестируем созданную схему)
 
Строка 161: Строка 161:
 
* Подключимся под учетной записью Петров П П и убедимся, что менеджер видит только свои счета фактуры.
 
* Подключимся под учетной записью Петров П П и убедимся, что менеджер видит только свои счета фактуры.
 
* Аналогичным образом проверим менеджера из группы Б.
 
* Аналогичным образом проверим менеджера из группы Б.
 +
 +
[[Category:Учебный курс]]

Текущая версия на 11:13, 12 ноября 2009

Решим такую задачу:

  1. На предприятии выделены группы пользователей: Директор, Бухгалтерия, Менеджеры А, Менеджеры Б.
  2. Менеджеры выписывают счета-фактуры, но так, что каждая группа менеджеров видит только документы своей группы.
  3. Бухгалтера видят все счета-фактуры и могут вносить в них изменения.
  4. Директор может только просматривать счета-фактуры, но не может их изменять.

Напомним, что настройку прав доступа и программирование на Гедымине следует осуществлять под учетной записью Administrator.

Содержание

[править] Шаг 1. Создаем группы пользователей

  • Вызываем команду Исследователь-Сервис-Администратор-Группы пользователей.
  • Выбираем команду Добавить. На экране откроется диалоговое окно.
  • Вводим наименование группы Директор.
  • Запоминаем идентификатор группы (в нашем случае 7, у вас идентификатор может отличаться!).

sec_example_1.png

  • Нажимаем кнопку Ок.
  • Повторяем действия для создания групп Бухгалтерия, Менеджеры А, Менеджеры Б.

У нас получились следующие идентификаторы:

sec_example_2.png

Еще раз обращаем ваше внимание, на то, что в вашем случае идентификаторы групп могут отличаться!

[править] Шаг 2. Создаем учетные записи пользователей и назначаем им группы

Учетные записи пользователей создаются в окне Исследователь-Сервис-Администратор-Пользователи. Для учебных целей мы создадим четыре записи: Директор -- Сидорский А.А., Бухгалтер -- Иванова И.И., Менеджер А -- Петров П.П. и Менеджер Б -- Сидоров С.С.

  • Воспользуемся командой Добавить и откроем на экране диалоговое окно.
  • Заполним поля: Наименование, Пароль, Подтверждение пароля.

sec_example_3.png

  • Каждой учетной записи должна быть поставлена в соответствие запись в справочнике контактов. Для ее создания, установим курсор в поле контакт и нажмем F2. На экране появится окно выбора типа создаваемого объекта:

sec_example_4.png

  • Укажем "Сотрудник предприятия".
  • В диалоговом окне заполним поля Фамилия, Имя, Отчетство.
  • Для объекта типа "Сотрудник предприятия" обязательно должны быть заполнена поля "Рабочая организация" и "Подразделение". Если нужного объекта нет в выпадающем списке, его всегда можно создать с помощью клавиши F2.

sec_example_5.png

  • Сохраняем запись в справочнике Сотрудников предприятия (контактов).
  • Теперь укажем группы для создаваемого пользователя. Воспользуемся кнопкой Группы... в правой части окна.

sec_example_6.png

  • С помощью кнопки Включить добавим в список две группы: Директор и Пользователи. с помощью кнопки Исключить уберем из списка позицию Администраторы. В конечном итоге мы должны получить такую картину:

sec_example_7.png

  • Аналогичным образом создадим пользователей Иванова, Петров и Сидоров, включив их в соответствующие группы.

sec_example_8.png

По поводу назначения групп необходим комментарий. Мы исключали каждого пользователя из группы Администраторы, так как последние всегда имеют доступ ко всем функциям системы и записям в базе данных. Мы включали пользователей в группу Пользователи для того, чтобы предоставить базовый доступ к командам Исследователя. В принципе, можно было бы обойтись и без этого, но тогда пришлось бы настраивать права для созданных групп на основные команды, такие как раздел Справочники, например.

[править] Шаг 3. Настраиваем права для класса объектов Счет-фактура

  • В Исследователе найдем раздел Торговля.
  • Раскроем его.
  • Установим курсор на позицию "04. Счета-фактуры (оптовая торговля)" и по правой кнопке мыши выберем из контекстного меню команду Свойства...

sec_example_9.png

  • Перейдем на вкладку Доступ.
  • Выберем из выпадающего списка вверху окна "Полный доступ".
  • С помощью кнопки "Исключить все" очистим список групп (останется только неудаляемая позиция Администраторы).
  • Из выпадающего списка внизу окна выберем "Менеджеры А" и нажмем кнопку "Добавить".
  • Аналогичные действия проделаем для группы "Менеджеры Б".
  • В итоге, список должен принять такой вид:

sec_example_10.png

  • Выбираем из выпадающего списка вверху окна уровень доступа "Просмотр и изменение".
  • Добавляем в список группу "Бухгалтерия":

sec_example_11.png

  • Последним шагом, выбираем уровень доступа "Только просмотр" и добавляем в список группу Директор:

sec_example_12.png

  • Закрываем окно кнопкой Ок.

[править] Шаг 4. Программируем назначение прав доступа для менеджеров

На данном этапе, задача уже почти решена за тем исключением, что менеджеры обеих групп имеют доступ ко всем счетам фактурам в базе данных. Разграничить доступ между группами можно, определив обработчик события BeforePost бизнес объекта. В зависимости от того, к какой группе менеджеров принадлежит текущий пользователь, будем исключать бит противоположной группы из всех трех дескрипторов безопасности документа. Таким образом, лишая ее всех прав на запись.

  • Откроем окно со списком счетов-фактур: Исследователь-Торговля-04.Счета-фактуры (оптовая торговля).
  • Перейдем в окно.
  • С помощью коомбинации клавиш Ctrl-Shift-E переведем окно в режим дизайнера. На экране появятся два дополнительных окна: Палитра компонентов и Инспектор объектов:

sec_example_13.png

  • В верхней части Инспектора объектов расположен выпадающий список компонентов формы. Найдем и выберем в нем компонент gdcInvDocument типа TgdcInvDocument:

sec_example_14.png

  • Перейдем на вкладку События в окне Инспектора объектов.
  • Установим курсор на позицию BeforePost.

sec_example_15.png

  • Нажмем кнопку с изображением трех точек.
  • Откроется Редактор скрипт объектов.
  • Введем следующий код обработчика события:
 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
  • Сохраним изменения с помощью команды па панели инструментов Редактора скрипт объектов:

sec_example_16.png

  • Закроем Редактор скрипт объектов.
  • На палитре компонентов выберем команду "Сохранить и выйти":

sec_example_17.png

[править] Шаг 5. Тестируем созданную схему

  • Поочередно подключимся к базе данных под учетными записями Administrator, Петров П П, Сидоров С.С. и создадим под каждой из них по одной счет-фактуре.
  • Подключимся под учетной записью Сидорский А. А. и убедимся, что пользователь видит все счета-фактуры, но не может их менять.
  • Подключимся под учетной записью Иванова И. И. и убедимся, что бухгалтер видит и может менят все счета-фактуры, но не может их удалять.
  • Подключимся под учетной записью Петров П П и убедимся, что менеджер видит только свои счета фактуры.
  • Аналогичным образом проверим менеджера из группы Б.
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты