Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > программа аутентификацию на delphi


Автор: ihtiandr 4.1.2011, 19:00
Народ помогите, написать программу которая могла бы делать аутентификацию при запуске.

Автор: Poseidon 4.1.2011, 19:06
Аутенти... тьфу ты, куда логиниться надо?

Автор: Данкинг 4.1.2011, 20:47
Цитата(ihtiandr @  4.1.2011,  19:00 Найти цитируемый пост)
помогите

Помогаю. В чём именно заключается вопрос? Куда логинимся, как Poseidon уже спросил? Спрашиваем только логин или и пароль тоже?

Автор: Akella 5.1.2011, 11:37
Опять студенты атакуют?

Автор: Mach3 5.1.2011, 17:57
Что-то подобное делал..
user posted image
Такую надо?

Автор: ihtiandr 5.1.2011, 21:03
аутентификация логина и пароля. 
Вот я пытался это сделать так:

Код

procedure TForm1.Button1Click(Sender: TObject);
vprocedure TForm1.Button1Click(Sender: TObject);
var
a,b,i,j:string;
f,l:textfile;
 begin
  i:=Edit1.text;
  j:=Edit2.text;
  reset(input,'qwe.txt');
  assignfile(l,'qwe1.txt');
  read(a,b);
  append(l);
  if (i=a) and (j=b) then begin showmessage('вы имеете допуск админа'); close; end
  else
   begin
   showmessage('вас зарегистрируют как пользователя');
   writeln(l,i,j);
   closefile(l);
 end;
end;
end.

Запускается правда даже если ввожу логин и пароль амина сохранённый в qwe.txt всё равно выходит showmessage('вас зарегистрируют как пользователя');
В чём здесь ошибка?Как её исправить?

Автор: Данкинг 5.1.2011, 21:12
Цитата(ihtiandr @  5.1.2011,  21:03 Найти цитируемый пост)
reset(input,'qwe.txt');

А assignfile не нужно перед этим?
Цитата(ihtiandr @  5.1.2011,  21:03 Найти цитируемый пост)
 read(a,b);

Вот это что за шедевр? Уж как-то так тогда, если логин с паролем в разных строчках находятся:
Код

var input:textfile;
...
assignfile(input,'qwe.txt');
reset(input);
readln(input,a);
readln(input,b);



Автор: ihtiandr 5.1.2011, 21:31
Огромное спасибо Данкинг. 
Только пожалуйста объясните ещё как связать этот модуль аутентификации с модулем любой другой программы таким образом чтобы если зашел админ у него была возможность редактировать код программы а если простой пользователь то он мог бы только ею пользоваться.
Заранее благодарен.

Автор: Данкинг 5.1.2011, 22:40
Цитата(ihtiandr @  5.1.2011,  21:31 Найти цитируемый пост)
таким образом чтобы если зашел админ у него была возможность редактировать код программы а если простой пользователь то он мог бы только ею пользоваться.

Следует дать права админу на редактирование, а пользователю - "Read Only". smile 

Автор: ihtiandr 5.1.2011, 23:03
Но как это сделать покажите пожалуйста хотя бы на этом примере
 Вот аутентификация:
Код

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,i,j:string;
input,l:textfile;
begin
i:=Edit1.text;
j:=Edit2.text;
assignfile(l,'qwe1.txt');
assignfile(input,'qwe.txt');
reset(input,'qwe.txt');
readln(input,a);
readln(input,b);
closefile(input);
append(l);
if (i=a) and (j=b) then begin showmessage('вы имеете допуск админа'); close; end
else
begin
showmessage('вас зарегистрируют как пользователя');
writeln(l,i,j);
closefile(l);
end;
end;
end.

А вот программа:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
a,b,c:integer;
begin
reset(input,'ewq1.txt');
rewrite(output,'ewq2.txt');
read(a,b);
c:=b+a;
write©;
  { TODO -oUser -cConsole Main : Insert code here }
end.

Автор: Данкинг 5.1.2011, 23:12
ihtiandr, в чём именно вопрос заключается - лично я не понял. smile Где код программы должен редактироваться - в неком самодельном редакторе?

Автор: ihtiandr 5.1.2011, 23:17
Нет в Delphi7 

Автор: kami 5.1.2011, 23:25
Чуть повторю Akella :  smile 
Тема разграничения прав доступа к функциям программы достаточно объемная и сложная, особенно если нужно чтобы "пользователь Вася имеет доступ к этому (полный доступ) и тому(только чтение), пользователь Петя - к этому(только чтение), а все из группы Админы - ко всему".
Применительно к топику - завести глобальную переменную IsAdmin, при логине присваивать ей значение (после ShowMessage), а при доступе к различным функциям проверять ее значение.

Автор: ihtiandr 5.1.2011, 23:33
kami можете привести пример.

Автор: Данкинг 5.1.2011, 23:42
Цитата(ihtiandr @ 5.1.2011,  23:17)
Нет в Delphi7

Чего нет в Delphi7?

Добавлено через 3 минуты и 49 секунд
Цитата(ihtiandr @  5.1.2011,  23:33 Найти цитируемый пост)
kami можете привести пример. 

Типа "сделайте одолжение"? smile 
ЗЫ: пример чего? Если "решите за меня" - это в "центр помощи".

Добавлено через 4 минуты и 59 секунд
Впрочем, вот тебе начало примера:
Цитата(kami @  5.1.2011,  23:25 Найти цитируемый пост)
Применительно к топику - завести глобальную переменную IsAdmin,

Код

var
 IsAdmin:boolean;


(извиняюсь за флуд). smile 

Автор: ihtiandr 5.1.2011, 23:50
Данкинг  флуд не страшно smile 
Я просто хочу понять smile  как это на примере  smile 

Автор: kami 6.1.2011, 00:36
Не будем отвлекаться на флуд smile
Пример (на более детальную расшифровку и комментирование я не способен).
Если честно, то не понял код программы из листинга выше - почему она консольная и где запрос логина и пароля. Ну да ладно, это Ваши проблемы, за этим отсылаю в DRKB>"Разработка приложений">"Создание заставки при запуске". В качестве формы-заставки будет выступать форма логина.

Сию чудо-переменную, не мудрствуя лукаво, объявим прямо в модуле, запрашивающем логин и пароль:
Код

unit Unit1;
....
var
  Form1: TForm1;
  IsAdmin:boolean;
....
if (i=a) and (j=b) then 
  begin 
    showmessage('вы имеете допуск админа'); 
    IsAdmin:=True;
    close; 
  end
else
  begin
    showmessage('вас зарегистрируют как пользователя');
    IsAdmin:=False;
    writeln(l,i,j);
    closefile(l);
  end;
....

теперь, чтобы выполнить/не выполнить какое-либо действие, зависящее от того, кто работает в программе, делаем так:

unit MainCalculates;
uses
  .....
  Unit1, // переменная IsAdmin объявлена в этом модуле, для того, чтобы иметь доступ к ней из других, нужно сослаться на Unit1
.....

procedure Calculate;
begin
  if IsAdmin then
    begin
      // здесь делаем что-то, что доступно админу
    end
  else
    begin
      // здесь делаем то, что доступно обычному пользователю.
    end;
end;


Добавлено через 3 минуты и 15 секунд
Пы.Сы. Настоятельно рекомендую скачать http://www.aew.wur.nl/UK/Delforexp/ , установить и перед тем, как вставлять код на форум, нажимать в Delphi комбинацию клавиш Ctrl+D и потом Enter. Бо читать неудобно.

Автор: ihtiandr 6.1.2011, 00:43
kami огромное спасибо smile 


Автор: Данкинг 6.1.2011, 00:58
kami, а почему нельзя винградовской разметкой форматировать код?

Автор: kami 6.1.2011, 01:04
Данкинг, а как это?
я говорил, в основном, про табуляцию (уровни вложенности операторов) и своевременные переносы строк, бо код "сплошняком", в особенности сложный, так читать мягко говоря, затруднительно

Автор: Данкинг 6.1.2011, 01:18
Цитата(kami @  6.1.2011,  01:04 Найти цитируемый пост)
а как это?

А, понял, в том плагине и табуляция делается автоматически. smile 

Автор: ihtiandr 7.1.2011, 14:46
Все работает вот я тут чуть изменил аутентификацию:

Код

var
  Form1: TForm1;
  IsAdmin:boolean;

implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a,b,i,j:string;
input,l:textfile;

begin
i:=Edit1.text;
j:=Edit2.text;
assignfile(l,'qwe1.txt');
assignfile(input,'qwe.txt');
reset(input,'qwe.txt');
readln(input,a);
readln(input,b);
closefile(input);
append(l);
if (i=a) and (j=b) then
 begin
showmessage('вы имеете допуск админа');
IsAdmin:=true;

WinExec('Project2.exe',SW_RESTORE);
  end
 else
begin
showmessage('вас зарегистрируют как пользователя');
IsAdmin:=false;
WinExec('Project2.exe',SW_RESTORE);
writeln(l,i,j);
closefile(l);
end;
end;
end.



Вот сама  программа:

Код

unit mainCalc;
implementation
uses
unit1;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c:real;
begin
  if IsAdmin then
    begin // здесь делаем что-то, что доступно админу

  a:=strtofloat(edit1.text);
  b:=strtofloat(edit2.text);
  c:=a+b;
  edit3.text:=FloattoStr(c);

    end
  else
    begin // здесь делаем то, что доступно обычному пользователю.
showmessage('вы не админ');

    end;
end;
end.



Я с начала запускаю аутентификацию а после проверки на логин и пароль запускается unit mainCalc; но даже если в аутентификации введены логин и пароль админа unit mainCalc; все равно выдает  showmessage('вы не админ');
Как это исправить?
В чем ошибка? 

Автор: Данкинг 7.1.2011, 15:08
ihtiandr, условие "if (i=a) and (j=b) then" выполняется? Для начала проверь это.

Автор: ihtiandr 7.1.2011, 17:02

Цитата

условие "if (i=a) and (j=b) then" выполняется? Для начала проверь это. 


Данкинг я проверял это, все выполняется правильно при логине и пароле админа 
 
Код

showmessage('вы имеете допуск админа');

а в противном случае
 
Код

showmessage('вас зарегистрируют как пользователя');

А все равно unit mainCalc; не работает как должен.

Автор: Данкинг 7.1.2011, 18:00
Цитата(ihtiandr @  7.1.2011,  14:46 Найти цитируемый пост)
WinExec('Project2.exe',SW_RESTORE);

До меня дошло: ты запускаешь отдельную программу? Тогда, стесняюсь спросить, откуда эта запущенная программа, узнает о значении переменной в какой-то другой? Тогда переменную IsAdmin убирай и передавай запускаемой программе параметр. Т. е. первая программа:
Код

var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,i,j:string;
input,l:textfile;
begin
i:=Edit1.text;
j:=Edit2.text;
assignfile(l,'qwe1.txt');
assignfile(input,'qwe.txt');
reset(input,'qwe.txt');
readln(input,a);
readln(input,b);
closefile(input);
append(l);
if (i=a) and (j=b) then
 begin
showmessage('вы имеете допуск админа');
IsAdmin:=true;
WinExec('Project2.exe admin',SW_RESTORE);
  end
 else
begin
showmessage('вас зарегистрируют как пользователя');
IsAdmin:=false;
WinExec('Project2.exe user',SW_RESTORE);
writeln(l,i,j);
closefile(l);
end;
end;
end.

Вторая:
Код

unit mainCalc;
implementation
uses
unit1;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c:real;
begin
  if paramstr(1)='admin' then
    begin // здесь делаем что-то, что доступно админу
  a:=strtofloat(edit1.text);
  b:=strtofloat(edit2.text);
  c:=a+b;
  edit3.text:=FloattoStr(c);
    end
  else
    begin // здесь делаем то, что доступно обычному пользователю.
showmessage('вы не админ');
    end;
end;
end.


Автор: ihtiandr 7.1.2011, 18:23
Данкинг  вы правы smile 
все получилось спасибо. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)