Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.11.2009, 19:50
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
Восклицание Авторизация пользователей

Здравствуйте!

Вопрос: Надо сделать авторизацию на главной форме для входа в программу! Есть два пользователя - Администратор-пороль, Продавец-пороль!
И как это будет в Access, в таблице поле Администратор-пороль, Продавец-пороль? Вообщем, пожалуйста отпишите код на примере с названием таблицы если это надо! И вы мне очень поможете

Заранее спасибо!
Ответить с цитированием
  #2  
Старый 25.11.2009, 21:44
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

делаешь таблицу на 3 поля (остальные на твоё усмотрение)
1. Автоинкремент
2. Логин
3. Пароль

Делаешь форму для ввода логина и пароля и создаешь её перед главной форме а дальше уже проверка на правильность
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 26.11.2009, 17:20
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

Вообщем, все сделал сам! Программная авторизация без какой либо базы для двух пользователей! Если кому надо то вот код
PHP код:
var
  
id1,pass1String;
  
id2,pass2String;
begin
  id1
:='Администратор';
  
pass1:='12345';
  
id2:='Продавец';
  
pass2:='111';

//Администратор
  
if (edit1.Text=id1) and (edit2.Text=pass1then  form2.Visible:=false
//Продавец
  
else if (edit1.Text=id2) and (edit2.Text=pass2then
    begin
      form2
.Visible:=false;
      
Form2.N1.Visible:=False;
      
Form2.N2.Visible:=False;
      
Form2.N5.Visible:=False;
      
Form2.N6.Visible:=False;
    
end
    
else
      
begin
        
if ((edit1.Text=id1) and (edit2.Text<>pass1))
          or ((
edit1.Text=id2) and (edit2.Text<>pass2)) then
          ShowMessage
('™Введен не верный логин или пароль, попробуйте еще раз!™');
      
end;

//отчистка edit
  
if ((edit1.Text=id1) and (edit2.Text=pass1))
    or ((
edit1.Text=id2) and (edit2.Text=pass2)) then Form2.Visible:=true;
  if ((
edit1.Text<>id1) or (edit2.Text<>pass1))
    or ((
edit1.Text<>id2) or (edit2.Text<>pass2)) then
    begin
      edit1
.Text:='';
      
edit2.Text:='';
    
end
      
else
        if ((
edit1.Text=id1) and (edit2.Text=pass1))
          or ((
edit1.Text=id2) and (edit2.Text=pass2)) then
          begin
            edit1
.Text:='';
            
edit2.Text:='';
          
end
Ответить с цитированием
  #4  
Старый 27.11.2009, 12:30
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от Йогурт
Вообщем, все сделал сам! Программная авторизация без какой либо базы для двух пользователей! Если кому надо то вот код

Врятли такой код кому понадобится, вообще, если бы у меня хоть один программист подобное написал, я бы его уволил))
Ответить с цитированием
  #5  
Старый 27.11.2009, 14:27
Rat Rat вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 391
Репутация: 6078
По умолчанию

Asinkrit Покажи как надо.
Ответить с цитированием
  #6  
Старый 27.11.2009, 16:21
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от Rat
Asinkrit Покажи как надо.

Легко)

Вырезки из одного проекта (база ms access):

во первых, перед запуском приложения, надо вывести сплеш окно для ввода логина и пароля, и если в базе таковые имеются, то приложение стартует, иначе нет.

Файл проекта:
Код:
  Application.Initialize;
  Application.CreateForm(TDM, DM); 

  DM.DBPath:=ExtractFilePath(Application.ExeName)+'_Garanties.mdb';

  FKSplash := TFKSplash.Create(Application);
  FKSplash.Show;
  FKSplash.Update;

  while not FKSplash.Going do Application.ProcessMessages;

  if FKSplash.Stop then
    begin
    DM.Free;
    FKSplash.Hide;
    FKSplash.Free;
    end
      else
        begin
        FKSplash.Hide;
        FKSplash.Free;
        // в этом месте создание форм и модулей
        Application.Run;
        end;

В дата модуле, подключение и проверка на наличие юзера:

Код:
function TDM.ConnectToDB: boolean;
begin
  try
    ABase.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
      FDBPath+';Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Database Password=19473396';
    ABase.Connected:=true;
  finally
    Result:=ABase.Connected;
  end;
end;

function TDM.GetUserID(const aLogin, aPassword: TStr50): Integer;
begin
  with QuerrySQL do
    try
      if active then close;
      SQL.Text:='select user_id, user_FIO, user_is_admin from users '+
        'where user_login = '+QuotedStr(aLogin)+' and user_password = '+
        QuotedStr(aPassword);
      Open;
      Last;
      First;
      if FieldByName('user_id').AsInteger > 0 then
        begin
        Result:=FieldByName('user_id').AsInteger;
        FUserFIO:=FieldByName('user_FIO').AsString;
        FIsAdmin:=FieldByName('user_is_admin').AsBoolean;
        end
          else
            begin
            Result:=0;
            FUserFIO:='';
            end;
      if active then close;
    except
      Result:=0;
      FUserFIO:='';
    end;
  FUserID:=Result;
end;

В сплеш форме, проверяем на введенные данные:
Код:
if DM.GetUserID(dxEdit1.Text,dxMaskEdit1.Text) = 0 then 
    StatusLabel.Caption:='Неверный логин или пароль...'
  else
    begin
      FGoing := true;
      FStop := false;
    end;

Или если нажата кнопка отмена, то
Код:
    FStop:=true;
    FGoing:=true;

Вообщем то все просто)

Последний раз редактировалось Asinkrit, 27.11.2009 в 16:26.
Ответить с цитированием
  #7  
Старый 27.11.2009, 16:47
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Цитата:
Вообщем, все сделал сам! Программная авторизация без какой либо базы для двух пользователей! Если кому надо то вот код
Недостаток такого метода, заключаются в невозможности добавления нового пользователя и изменении пароля без перекомпиляции проекта...
Т.е. имя и пароль строго фиксированы...для простейшей защиты от родителей подойдет и так, но не более...
Поступи по примеру Asinkrit храни данные о пароле и имени в базе данных...еще их можно хранить в реестре или файле...при этом желательно (и настоятельно) хоть немного зашифровать имя и пароль...и не хранить их в явном виде...
Не обязательно выводить сплэш (хотя с ним красивее) для ввода пароля...можно и обычное модальное окно с 2-мя полями ввода и 2-мя кнопками...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #8  
Старый 27.11.2009, 17:55
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Абсолютно согласен с Asinkrit.
Так и правельнее, и удобнее, и красивее
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #9  
Старый 27.11.2009, 19:46
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Ну во-первых, если делать систему доступа, то нужно определиться с привилегиями.
Во-вторых, хранить пароли и логины в виде хэшей и сравнивать хэш от хэша

Почему нужны привелегии? Ибо если какой-нить продаван запустит в магазин товарища с отладчиком, то при простой проверке, можно заменить соответствующий байтик и получить доступ. Если есть система привилегий, то это сделать значительно сложнее
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #10  
Старый 27.11.2009, 21:00
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

Все прочитал, объясняю! По задумке программы у меня всего два пользователя! Это Администратор и продавец! Еще каких либо пользователей не планируется, так что делать в БД таблицу на Пользователей нет смысла! К тому же, настройка подключения базы у меня делает программа, так что еще поэтому отпадает БД пользователей!
Поле пороль зашифрован звездочками, думаю этого будет достаточно! Темболее программа пишется не для большого предприятия
Ответить с цитированием
  #11  
Старый 27.11.2009, 21:07
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

И вообще, если говорить на счет безопасности какой-то! То есть вариант сделать чтобы через каждый месяц выдавал сообщения о смене пороля! Вообщем смотря для какой программы делаешь защиту..и сколько в ней будет работать пользователей! Вообщем как то так
Ответить с цитированием
  #12  
Старый 28.11.2009, 18:12
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Цитата:
Сообщение от Йогурт
Все прочитал, объясняю! По задумке программы у меня всего два пользователя! Это Администратор и продавец! Еще каких либо пользователей не планируется, так что делать в БД таблицу на Пользователей нет смысла! К тому же, настройка подключения базы у меня делает программа, так что еще поэтому отпадает БД пользователей!
Поле пороль зашифрован звездочками, думаю этого будет достаточно! Темболее программа пишется не для большого предприятия

Как вариант, предлагаю тебе сделать формы с которыми работает продавец и формы с которыми работает администратор, и при проверке пароля соответственно их и показывать. А звездочками пароль не шифруеться . Это он так отображаеться в системе. Храни пароли в файле из двух строк - 1-я строка - это хэш пароля админа, а 2-я - хэш пароля продавца. Тогда система буден защищена надежнее.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #13  
Старый 08.12.2009, 14:42
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

Здравствуйте! Еще вопрос возник по авторизации! На всякий повторяю код моей авторизации
PHP код:
procedure TForm1.SpeedButton1Click(SenderTObject);
var
  
id1,pass1String;
  
id2,pass2String;
begin
  id1
:='Администратор';
  
pass1:='5112009';
  
id2:='Продавец';
  
pass2:='';

//Администратор

  
if (Edit1.Text=id1) and (Edit2.Text=pass1then
  begin
  Form2
.N22.Visible:=False;
  
Form17.Constraints.MaxHeight:=533;
  
Form17.Constraints.MinHeight:=533;
  
Form17.Constraints.MaxWidth:=424;
  
Form17.Constraints.MinWidth:=424;
  
Form1.Visible:=False;
  
end
  
//Продавец
  
else if (Edit1.Text=id2) and (Edit2.Text=pass2then
  begin
  Form2
.N1.Visible:=False;
  
Form2.N2.Visible:=False;
  
Form2.N6.Visible:=False;
  
Form17.Constraints.MaxHeight:=370;
  
Form17.Constraints.MinHeight:=370;
  
Form17.Constraints.MaxWidth:=424;
  
Form17.Constraints.MinWidth:=424;
  
Form1.Visible:=false;
  
end
  
else
begin
  
if ((Edit1.Text=id1) and (Edit2.Text<>pass1))
  or ((
Edit1.Text=id2) and (Edit2.Text<>pass2)) then
  Application
.MessageBox('Введен не верный Логин или Пароль, попробуйте еще раз!','Ошибка');
  
end;

//Отчистка edit
  
if ((Edit1.Text=id1) and (Edit2.Text=pass1))
  or ((
Edit1.Text=id2) and (Edit2.Text=pass2)) then Form2.Visible:=True;
  if ((
Edit1.Text<>id1) or (Edit2.Text<>pass1))
  or ((
Edit1.Text<>id2) or (Edit2.Text<>pass2)) then
begin
  edit1
.Text:='';
  
edit2.Text:='';
  
end
  
else
  if ((
Edit1.Text=id1) and (Edit2.Text=pass1))
  or ((
Edit1.Text=id2) and (Edit2.Text=pass2)) then
begin
  Edit1
.Text:='';
  
Edit2.Text:='';
  
end;

end

Вопрос: Мне надо сделать чтобы я мог сменить пороль Администратора и Продовца. Также логин и пороль должен записыватся в текстовый файл.

Пожалуйста! Знающим, напишите код!

Заранее спасибо!
Ответить с цитированием
  #14  
Старый 08.12.2009, 16:38
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Воспользуйся моим примером, который я давал выше, храни пароли в БД. То что ты написал, извини конечно, но это полная бредятина, кстати, половину строк можно выкинуть из твоего кода, и при этом все будет работать)
Ответить с цитированием
  #15  
Старый 08.12.2009, 16:56
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

Зачем мне БД скажи? Если у меня существуют только два пользователя Администратор и Продавец! Далее, Настройка пути к БД происходит в самой программе после авторизации так что БД отпадает! БД нужно было бы для того если пользователей было бы очень много! Если бы эта программа была многопользовательской! Думаю суть понял..
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:06.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter