(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Об одном способе разграничения прав пользователей в приложениях Delphi (документация, исходники)

Источник: delphimaster
Рощупкин А.В.

Аннотация.

  В статье рассмотрен один из возможных способов разграничения прав доступа пользователей в многопользовательском приложении. Предложенный метод основан на хранении в базе данных сведений о компонентах формы и их соответствии кодам пользователей. Примеры прилагаемого программного кода адаптированы под базу данных Microsoft Access. В тексте статьи имеются примеры для баз данных Oracle.

База данных.

В базе данных будем хранить следующую информацию:

  1. Таблица пользователей - код пользователя, имя пользователя, пароль доступа (в примерах к статье это поле не используется). В случае работ с базой данных Oracle полезно также хранить аккаунт пользователя (имя схемы пользователя).
  2. Таблица ролей - код роли, наименование роли. Роли введены для более компактного и прозрачного для понимания хранения информации о доступе. Гораздо экономичнее хранить соответствие компонент форм и пользователей опосредованно через роли. Так, например, несколько пользователей могут принадлежать одной роли.
  3. Таблица соответствия ролей и пользователей - код роли, код пользователя.
  4. Таблица компонент форм Delphi - имя формы, имя компонента, код роли. В этой таблице хранится соответствие компонент форм Delphi и ролей. Хранение может быть двух видов: а) храним те компоненты, к которым разрешен доступ; б) компоненты к которым доступ не разрешен. Представляется, что второй способ является более экономичным, хотя и менее понятен (конечно, логичнее хранить соответствие ролей и то, что разрешено для них) - в первом случае придется либо дополнительно хранить вообще все компоненты формы, либо программно отслеживать при инициализации доступ к таким компонентам формы как TLabel, TPanel и т.д. В статье реализован второй способ.

Реализация.

  Для реализации метода будем использовать класс TBaseForm. Внесем изменения в пакет ParentForm.dpk - добавим юнит UntTypes.pas (см. листинг 1). В случае использования базы данных Oracle переменную Global_Connection можно сделать классом TOracleSession (см. описания классов пакета Direct Oracle Access). В класс TBaseForm добавим процедуру SetPermission, которой передаются коннект к базе данных (в случае Oracle - сессию пользователя) и код пользователя (см. листинг 2).

unit UntTypes;

interface

uses ADODB;

var
    // глобальная сессия 
   Global_Connection: TADOConnection;
    // глобальный код пользователя 
   Global_UsrIdx: integer;

implementation

end.
Листинг 1. Юнит UntTypes.pas
procedure TBaseForm.SetPermission(Connection: TADOConnection; UsrIdx: integer);
var
   ds: TADODataSet;
   Ctrl: TComponent;
begin
   if ( csDesigning in Self.ComponentState ) then
      Exit;
   if ( Connection = nil ) then
      Exit;

    // запрос информации из базы данных 
   ds := TADODataSet.Create(nil);
   ds.Connection := Connection;
   ds.CommandType := cmdText;
   ds.CommandText :=
      'SELECT ROL2USR.ROLIDX, DFM.DFMNME, DFM.CRLNME ' +
      'FROM DFM, ROL2USR ' +
      'WHERE (((DFM.DFMNME)=' + #39 + Self.Name + #39 +
      ' AND [DFM].[ROLIDX]=[ROL2USR].[ROLIDX]' +
      ') AND ((ROL2USR.USRIDX)=' + IntToStr(UsrIdx) + '));';
   ds.Open;

    // делаем недоступными только те элементы управления
   // которые хранятся в базе 
   while ( not ds.Eof ) do
   begin
      Ctrl := Self.FindComponent(ds.FieldByName('CRLNME').AsString);
      if ( Ctrl <> nil ) then
         if ( Ctrl is TWinControl ) then
            TWinControl(Ctrl).Enabled := False;

      ds.Next;
   end;

   ds.Close;
   ds.Free;
end;
Листинг 2. Процедура SetPermission.

  Вызов процедуры SetPermission поместим в конец конструктора TBaseForm.

  Инициализация переменных Global_Connection, Global_UsrIdx должна происходить при входе в программу до создания окон, унаследованных от TBaseForm. Естественно, сама форма, в которой происходит вход, не должна быть наследником TBaseForm. Причем, при использовании Oracle рекомендуется сначала соединяться с базой данных "слабым" пользователем, т.е. таким у которого есть права только на выбор из минимального числа таблиц - таблицы пользователей и т.д. Только после проверки правильности ввода пароля можно выполнить команду alter session для аккаунта пользователя.

Ссылки по теме

Файлы для загрузки


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 05.02.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Panda Mobile Security - ESD версия - на 1 устройство - (лицензия на 1 год)
Stimulsoft Reports.Ultimate Single License Includes one year subscription
ABViewer Professional пользовательская
Quest Software. Toad for Oracle Development Suite
IBM RATIONAL Clearcase Floating User From Rational Clearcase Lt Floating User Trade Up License + Sw Subscription & Support 12 Months
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Утиль - лучший бесплатный софт для Windows
ЕRP-Форум. Творческие дискуссии о системах автоматизации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100