C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

  ЗакрытаНовая темаНовый опрос
Помогите пожалуйста разобраться с паролем?
UZER
Отправлено: 23.05.2003, 09:10


Не зарегистрирован







Ребята подскажите как в проге сделать следующее:
есть пункт меню под названием "Корректировка" к нему есть доступ только у одного пользователя. подскажите как организовать ввод пароля и его проверку на правильность. ohmy.gif
Георгий
Отправлено: 23.05.2003, 11:24


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Делаем ещё один пункт меню — вход в систему или что-то в этом роде, и в нём:
1. делаем enabled =true для нужного пункта меню
2. запускаем таймер, который, например, через 30 сек делает этот пункт enabled=false
Asher
Отправлено: 23.05.2003, 12:48


Мастер участка

Группа: Модератор
Сообщений: 550



Можно воспользоваться свойством формы KeyPreview = true и сделать набор пароля скрытой процедурой biggrin.gif
//---------------------------------------------------------------------------
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



В принципе все это правильно. Только есть один недостаток — для смены пользователя и пароля необходимо перекомпилировать программу. Можно пароль хранить в зашифрованном виде в каком-нибудь файле. Пароль из этого файла извлекается, декодируется и сравнивается с введенным пользователем. Такой способ вполне приемлем если необходимо создать защиту от обычных пользователей. Для смены пароля достаточно сгенерировать файл с новым паролем и заменить им старый. sad.gif
Asher
Отправлено: 24.05.2003, 13:20


Мастер участка

Группа: Модератор
Сообщений: 550



Разумеется пароль лучше в программу не зашивать biggrin.gif
Выше показаны просто варианты простейшей техники ввода пароля, а не конкретная реализация системы ограничения прав доступа
Guess who
Отправлено: 31.07.2003, 11:26


Не зарегистрирован







динамически Енаблить/дизаблить меню удобно, сделав его через Action и отписав у Action'а событие OnUpdate. Права пользователя можно хранить в главной форме приложения или еще где-нибудь глобально. При этом если права поменялись, менюха при следующей своей отрисовки (т.е. открытии) сама запросит вышеупомянутое событие и будет в правильном состоянии.

Вернуться в Вопросы программирования в C++Builder
ЗакрытаНовая темаНовый опрос