(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 для аккаунта пользователя.

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

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


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

Магазин программного обеспечения   WWW.ITSHOP.RU
The BAT! Home Upgrade- 1 компьютер
AutoCAD LT 2019 Commercial New Single-user ELD Annual Subscription
ABBYY PDF Transformer+ Full
Oracle Database Personal Edition Named User Plus License
Symantec Endpoint Encryption, License, 1-24 Devices
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Новые программы для Windows
Компьютерная библиотека: книги, статьи, полезные ссылки
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Пишу программы на заказ для студентов (245)
Пишу для студентов на с, с++, паскаль в средах ms visual studio, qt, builder, borland c, delphi....
 
Разработка программ базы данных (54)
Написание прикладных компьютерных программ (базы данных) на заказ. Разработка корпоративных...
 
Беговая дорожка (3)
Купила беговую дорожку вот здесь https://4gym.com.ua/product/technogym-artis-run Очень классная,...
 
Аналоги виагры (3)
Если мужчине, по каким либо причинам, не подходит виагра, существуют качественные аналоги...
 
работа на дому! (8)
Доброго времени суток дорогие друзья. Многоуровневый маркетинг окончательно признан...
 
 
 



    
rambler's top100 Rambler's Top100