Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Роли и привилегии [D7, XP]


Анатолий_1987 ©   (2008-07-19 10:46:00) 

Добрый день! Столкнулся с такой задачей, у каждого пользователя в моем проекте должны быть привилегии, объекты на формах должны быть доступны только для определенных юзеров. Я сейчас никак не могу сообразить как это все реализовать. У меня есть таблица юзеров, есть таблица для ролей, только пока, не знаю что в ней хранить, все что пришло в голову это хранить имя объекта и имя формы на котром он расположен. Затем при Activate формы бегать по объектам формы и проверять в таблице состояние True или False для конкретного юзера. Думаю не очень хороший метод, по этому хочу узнать как поступают опытные программисты.

Для примера у меня на форме есть Кнопка Button1 - у которого событие OnClick (ShowMessage('Hello'))

Что именно этого объекта мне нужно хранить в таблице с ролями, что бы в дальнейшем я бы мог проверять включить или выключить этот объект?  

Заранее спасибо.


stas   (2008-07-21 17:10:00) [1]

я храню так
Поля:

роль
класс формы
имя объекта на форме
свойство объекта (Enabled,Visible)
значение

Часто используемые свойства и их значения сделал списком в интерфейсе программы.

и с помощью этой процедуры управляю объектами


USES ...typInfo...
...
procedure SetPropertyValue(AObject:TObject;AProperty:String;AValue:Variant);
var
 pp:ppropinfo;
 s:string;
 obj:TObject;
begin

pp:=getpropinfo (AObject,AProperty);
if pp<>nil then
 case  pp.PropType^.Kind of
 tkInteger:setordprop(AObject,AProperty,strtoint(AValue));
 tkClass:
  begin
   Obj:=GetObjectProp (AObject,AProperty);
   if (obj is TStrings) then TStrings(Obj).Text:=AValue
   else  setordprop(AObject,AProperty,strtoint(AValue));
  end;
 tkString, tkLString, tkWString:setstrprop(AObject,AProperty,AValue);
 tkEnumeration:setEnumprop(AObject,AProperty,AValue);
 tkFloat:setfloatprop(AObject,AProperty,strtofloat(AValue));
 tkVariant: SetVariantProp (AObject,AProperty,strtofloat(AValue));
 end;
end;


Dennis I. Komarov   (2008-07-21 09:20:00) [2]

Я бы хранил:
1. Юзеры
2. Группы (давать права на группы проще нежели каждому юзеру по отдельности)
3. Объекты
4. Таблица прав (соответствие юзеров (групп) и объектов


Правильный$Вася   (2008-07-20 19:57:00) [3]

для таких целей очень подходит TAction


Анатолий_1987   (2008-07-19 11:29:00) [4]

Теперь ясно, спасибо.


Loginov Dmitry   (2008-07-19 11:06:00) [5]

> Что именно этого объекта мне нужно хранить в таблице с ролями,
> что бы в дальнейшем я бы мог проверять включить или выключить
> этот объект?  


храни что угодно. Лишь бы тебе этого было достаточно для дальнейшей работы.
Я бы, к примеру, хранил следующим образом:

TMyForm.Button1.Enabled = ...
TMyForm.Button1.Visible = ...
TMyForm.MenuItem1.ShortCut = ....


этой информации достаточно для обращения к любому именованному объекту на форме с использованием RTTI.

Естественно, можно придумать любой другой метод, который будет по душе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо