UZER |
Отправлено: 23.05.2003, 09:10 |
|
Не зарегистрирован
|
Ребята подскажите как в проге сделать следующее:
есть пункт меню под названием "Корректировка" к нему есть доступ только у одного пользователя. подскажите как организовать ввод пароля и его проверку на правильность. |
|
Георгий |
Отправлено: 23.05.2003, 11:24 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Делаем ещё один пункт меню — вход в систему или что-то в этом роде, и в нём:
1. делаем enabled =true для нужного пункта меню
2. запускаем таймер, который, например, через 30 сек делает этот пункт enabled=false |
|
Asher |
Отправлено: 23.05.2003, 12:48 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Можно воспользоваться свойством формы KeyPreview = true и сделать набор пароля скрытой процедурой
//---------------------------------------------------------------------------CODE |
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{ //Ввод пароля
int NumbChar = 6; //Количество символов пароля
char Password[NumbChar]={68,69,83,73,71,78};//Пароль "DESIGN"
//не реагирует на раскладку Shift/CapsLock)
static unsigned char PassCnt = 0;//Текущий указатель набираемого символа
if (Key == Password[PassCnt])//Если набираемый символ — символ пароля, то
PassCnt++; //Увеличить указатель символов
else //Иначе, если символ неправильный, то
PassCnt = 0; //Сбросить указатель символов
if (PassCnt == NumbChar) { //Если набрали все символы, то
ASettings->Enabled = true; //Разрешить пункт меню
PassCnt = 0; //Сбросить указатель символов
} //if (PassCnt == NumbChar)
} //FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
|
|
Admin |
Отправлено: 24.05.2003, 06:00 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Можно и так:
// при выборе этого пункта меню
CODE |
void __fastcall TForm1::N1Click(TObject *Sender)
{
AnsiString Passw = InputBox("Проверка прав доступа", "Пароль", "Password");
if(Passw != "12345") { ShowMessage("Пароль неверен !"); return; }
// ...
} |
или тоже через InputQuery(),
или сделать аналогичную форму с Edit и, если хотите чтобы еще
пароль при наборе отображался в виде * установить в свойствe PasswordChar компонента Edit символ *
Отредактировано Admin — May 24 2003, 06:01 AM
|
|
Anry |
Отправлено: 24.05.2003, 12:32 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 56
|
В принципе все это правильно. Только есть один недостаток — для смены пользователя и пароля необходимо перекомпилировать программу. Можно пароль хранить в зашифрованном виде в каком-нибудь файле. Пароль из этого файла извлекается, декодируется и сравнивается с введенным пользователем. Такой способ вполне приемлем если необходимо создать защиту от обычных пользователей. Для смены пароля достаточно сгенерировать файл с новым паролем и заменить им старый.
|
|
Asher |
Отправлено: 24.05.2003, 13:20 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Разумеется пароль лучше в программу не зашивать
Выше показаны просто варианты простейшей техники ввода пароля, а не конкретная реализация системы ограничения прав доступа
|
|
Guess who |
Отправлено: 31.07.2003, 11:26 |
|
Не зарегистрирован
|
динамически Енаблить/дизаблить меню удобно, сделав его через Action и отписав у Action'а событие OnUpdate. Права пользователя можно хранить в главной форме приложения или еще где-нибудь глобально. При этом если права поменялись, менюха при следующей своей отрисовки (т.е. открытии) сама запросит вышеупомянутое событие и будет в правильном состоянии. |
|