Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Вниз

Интерфейс клиента...   Найти похожие ветки 

 
Cranium   (2003-06-09 14:29) [0]

Вопрос в следующем... Поделитесь способом решения формирования интерфейса клиента в зависимости от роли пользователя... Мне на ум проиходит два варианта решения, это
1)Писать для каждого пользователя(набора прав свое приложение):((
2)Формировать интерфейс динамически...
а)Хрнить в базе таблицу соответствия доступности элементов интерфейса пользователя (пункты меню, формы и т.д.) и формировать интерфейс при запуске клиента (лучший вариант на мой всгляд в связки с ActionList)
б)Читать права на доступность к таблице, тригеру, ХП и т.д. во время выполнения приложения
в)....?
Кто что может присоветовать?


 
Alexandr   (2003-06-09 14:46) [1]

это очень сложный и многогранный вопрос.
тут нет единственно верного решения.
И каждый разработчик разрабатывает свои метод на этот счет.
Никая универсализация тут пока невозможна.
И разработчики не очень-то торопятся раскрывать свои секреты в этой области.
Короче все зависит только от твоей квалификации. Чужие советы и наработки тут практически бесполезны.


 
AkaSaint   (2003-06-09 14:47) [2]

Вариант б), по-моему, самый нормальный. Ты можешь при логине пользователя проверить все эти параметры сразу и установить Visible=false для недоступных данному ползователю элементов упрвления. Вариант а) имхо себя не оправдывает - слишком большая трудоемкость, а эффект - как от б).


 
roottim   (2003-06-09 14:57) [3]

я сам ориентируюсь на написании АРМ.. в этом случае отличий форм пользователя мало...

приблизительное решение...
1. по запросу получаеш уровень доступа пользователя (0,1,..,2 и тд)
2. у всех контролов всегда есть св-во tag, если оно незаюзано, то именно сюда и пиши уровень доступа
3. по созданию формы - для контролов с tag > уровень доступа - делаеш то что тебе необходимо.


 
Nikolay M.   (2003-06-09 15:42) [4]

Я храню права юзеров на сервере. После авторизации юзера передаю назад клиенту информацию о его правах (просто битовая комбинация), соответственные кнопки (или ActionItem-ы) делаю (не)доступными. Но при таком подходе никто не мешает послать в твою формочку EnableWindow и разрешить все кнопки. А по поводу того, как лучше сделать ограничение прав на сервере (в случае с тонким клиентом) я спрашивал тут:
http://delphimaster.net/view/3-1054731566/
Буду делать так: проверять на сервере действие, выполняемое юзером и, если у него нет на это действие прав, генерировать ошибку.


 
Cranium   (2003-06-09 16:39) [5]


> Но при таком подходе никто не мешает послать в твою формочку
> EnableWindow и разрешить все кнопки

Да, но я говорил при интерфейс, уровень доступа к данным определяется правами пользователя на таблицы, ХП и т.д. Сервер все равно не даст выполнить доступ к данным....

Мне нужно создать механизм динамического формирования интерфейса, а защита реализуется полностью сервером... И на данный момент задумана не трех звенка....


 
Sandman25   (2003-06-09 16:44) [6]

В крайнем случае можно написать процедуру проверки доступа и засунуть ее вызов в каждый обработчик (кнопки и т.д.).
Но лучше сразу строить только то, что нужно. Кроме как создания форм в runtime я способов не вижу.


 
Cranium   (2003-06-09 16:44) [7]


> roottim (09.06.03 14:57)


> ... tag > уровень доступа

Это хорошо при вертикальном распределение прав... А как быть если доступ предоставлять по авторству записи, например начальник имеет право читать записи подчиненных своего отдела и только своего, сотрудник только свои, генеральный все. А не просто доступ: вставка, редактирование, удаление, просмотр, изменение....


 
Sandman25   (2003-06-09 16:49) [8]

Cranium © (09.06.03 16:44)

А вот это реализуется с помощью механизма View либо продвинутой системой (с заведением справочников типов документов, предоставления к ним доступа и т.д.)


 
Cranium   (2003-06-09 16:54) [9]


> А вот это реализуется с помощью механизма View либо продвинутой ......

Об этом и речь....



 
Sandman25   (2003-06-09 17:10) [10]

Если View, то например
create view viw_my_docs as select * from all_docs where creator = user;
revoke all on all_docs from public;
grant select, delete, update, insert on my_docs to public;
В viw_my_docs будут только те док-ты, которые завел сам пользователь (в informix sql есть функция user, равная login"у пользователя, при записи по триггеру или в хранимой надо записывать данное поле)

Если продвинутая, то тут уже все только от тебя зависит. Какие объекты охраняются, какие уровни доступа и т.д. Короче, от предметной области зависит. Изучи, проклассифицируй, с заказчиком пообщайся.
У нас, например, в спец. таблице записаны, номера молов, к товарам которых имеет доступ конкретный пользователь. В другой таблице записаны типы справочников, которые пользователь может изменять. В третьей таблице записаны типы док-тов, к которым имеет доступ пользователь. И еще много разных таблиц...


 
Sergey13   (2003-06-10 09:10) [11]

2Cranium © (09.06.03 16:39)
>Мне нужно создать механизм динамического формирования интерфейса
Ты хочешь написать одно приложение для ВСЕГО ВААЩЕ? Или же у тебя будут все таки некие АРМы но с разными правами. Первое, ИМХО - утопия, второе, опять же ИМХО, легче всего организовать как у AkaSaint (09.06.03 14:47).


 
Polevi   (2003-06-10 10:49) [12]

можно MSScriptControl использовать на клиенте, написав для актора скрипт, который будет выполняться
возможности велики, вплоть до назначения собственных обработчиков событий для компонентов, типа

Sub Init
Self.Button1.OnClick=Button1_Click
End Sub

Sub Button1_Click
Self.Caption="wwdfsdf"
End Sub


 
Polevi   (2003-06-10 10:52) [13]

http://www.compress.ru/Temp/1773/index.htm


 
Сергєєв Володимир   (2003-06-10 11:24) [14]

Я эту фигню подсмотрел в одной проге и щас активно использую в своих программах.

В базе данных есть таблицы "Пользователи", "Меню", и "Меню пользователей".

"Пользователи" состоит из доменов "Код", "Имя", "Пароль" (и еще там кое-что но это неважно)
"Меню" - "Код меню", "Код предка", "Заголовок", "Выполнить".(В общем, - классическая древовидная структура, кому не ясно - сходите к деревьям в SQL).
"Меню пользователей" - "Код пользователя"("Пользователи"), "Код меню"("Меню")
Далее ХП выбырает менюшки для данного пользователя в зависимости от логина и пароля.

Указатели менюшек главного меню формы выстраиваются в событии AfterConnect (TIBDataBase). У всех менюшек в таге хранится ее "код" в базе данных. У всех обработчик обытия OnClick, в котором многовложенный блок
if MenusStr.Strings[(Sender as TComponent).Tag]="Тому-то" then
То-то
else
if MenusStr.Strings[(Sender as TComponent).Tag]="Тому-то" then
То-то
else
........
if MenusStr.Strings[(Sender as TComponent).Tag]="Тому-то" then
То-то
В событии BeforeDisconnect(TIBDataBase) менюшки грохаются.

Таким образом мы имеем динамически выстраиваемые меню программы в зависимости от прав пользователя. Так что SendMessage тута не поможет (посылать просто некому :)))

Если есть вопросы, то могу поделиться готовым компонентом (TIBMainMenu & TIBMainMenuSecure)для работы с такой структурой(писалось для себя под InterBaseExpress). Обращаться на мыло.




Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
7-7738
anton_cor
2003-04-22 15:31
2003.07.03
Как получить список процессов из консольного или не имеющего окна


9-7284
K@zzel
2003-01-21 16:54
2003.07.03
Просто вопрос


11-7376
lamachok
2002-10-24 23:55
2003.07.03
картинки


4-7754
il
2003-04-29 17:01
2003.07.03
Как узнать, есть ли в трее иконка чужого приложения?


1-7523
nester
2003-06-21 19:31
2003.07.03
Как распечатать содержимое TListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский