(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
Business Studio 4.2 Enterprise. Конкурентная лицензия + Business Studio Portal 4.2. Пользовательская именная лицензия.
Nero 2018 Platinum ESD
Microsoft System Center Standard Core Sngl License/Software Assurance Pack OLP 2Licenses NoLevel CoreLic Qualified
SAP Crystal Reports 2008 INTL WIN NUL License
dbForge Studio for MySQL Professional license
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Новые материалы
Работа в Windows и новости компании Microsoft
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Пишу программы на заказ для студентов (187)
Пишу для студентов на с, с++, паскаль в средах ms visual studio, qt, builder, borland c, delphi....
 
Пишу программы на заказ профессионально (2282)
Пишу программы на заказ на языках Pascal (численные методы, списки, деревья, прерывания) под...
 
Ищу программиста для написания программы (21)
Ищу программиста ,владеющего Вижуал Бэйсик и программированием в Экселе, для написания...
 
Настройка меню "Пуск" Windows 7 при помощи реестра (3)
Скажите пожалуйста, а как можно закрепить ярлыки программ с помощью твиков реестра в левой части...
 
Ищу программиста PYTHON (1)
Ищу программиста для написание программ python 3 + библиотека tkinter Есть данные в БД...
 
 
 



    
rambler's top100 Rambler's Top100