|
#1
|
|||
|
|||
Помогите найти ошибку.
Суть: -Программа с 4 пользователями, 1 админ, и 3 остальных. -Админ назначает доступ пользователям кто какие функции может выполнять. Проблема: Если каждому назначать по отдельности(войти-назначить-выйти), всё работает, ежели определить доступ сразу всем 3, то работает только тот, кому назначили доступ последнему, остальным запрещает всё. Файл приложил, там чуть все разбросано, разбирался...Но пока не понял... Помогите разобраться... Пароли: Администратор - admin Вова - vova Дима - dima Стас - stas Последний раз редактировалось M.A.D.M.A.N., 28.02.2014 в 22:45. |
#2
|
|||
|
|||
Качать лень поэтому лишь предположу что ты неправильно сохраняешь изменения. Правильно ли у тебя указано условие цикла? Выложи лучше код.
|
#3
|
|||
|
|||
Всё,я исправил. А можете помочь с этим... При не правильном вводе пароля, показывает ShowMessage по всем пользователям а не по одному...как надо...
Код:
procedure TForm1.Button1Click(Sender: TObject); var p,p1,p2,p3,p4:integer; st,par:string; begin st:=ComboBox1.Text; par:=Edit1.Text; if (st='Артём') and (par='artem') then begin ShowMessage('Зравствуйте, Артём! У вас высший уровень доступа!'); RadioButton1.Visible:=true; RadioButton2.Visible:=true; RadioButton3.Visible:=true; RadioButton4.Visible:=true; end else begin p:=p+1; if p=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!'); if p=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!'); if p=3 then form1.Close; end; if (st='Максим') and (par='maxim') then begin ShowMessage('Зравствуйте, Максим! Вам доступны секретные данные!'); RadioButton1.Visible:=true; RadioButton2.Visible:=true; RadioButton3.Visible:=true; RadioButton4.Visible:=false; end else begin p1:=p1+1; if p1=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!'); if p1=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!'); if p1=3 then form1.Close; end; if (st='Александр') and (par='sasha') then begin ShowMessage('Зравствуйте, Александр! Вам доступны открытые данные!'); RadioButton1.Visible:=true; RadioButton2.Visible:=false; RadioButton3.Visible:=false; RadioButton4.Visible:=false; end else begin p2:=p2+1; if p2=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!'); if p2=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!'); if p2=3 then form1.Close; end; if (st='Владислав') and (par='vlad') then begin ShowMessage('Зравствуйте, Владислав! Вам доступны открытые данные!'); RadioButton1.Visible:=true; RadioButton2.Visible:=false; RadioButton3.Visible:=false; RadioButton4.Visible:=false; end else begin p3:=p3+1; if p3=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!'); if p3=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!'); if p3=3 then form1.Close; end; if (st='Анатолий') and (par='tolik') then begin ShowMessage('Зравствуйте, Анатолий! Вам доступны секретные данные!'); RadioButton1.Visible:=true; RadioButton2.Visible:=true; RadioButton3.Visible:=true; RadioButton4.Visible:=false; end else begin p4:=p4+1; if p4=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!'); if p4=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!'); if p4=3 then form1.Close; end; end; |
#4
|
||||
|
||||
Потому что при вводе неправильного пароля сработают все else, ведь условие ни одного if не выполняется.
Только предупреждаю сразу. Никогда, даже под дулом пистолета, нельзя писать такой код. Строго заданные имена пользователей и пароли, которые находятся открытием программы любым текстовым редактором, и без права изменить эту информацию. А также многократное дублирование одного и того же кода. jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Aks67rus (01.03.2014)
|
#5
|
|||
|
|||
Это практическое задание, поэтому не сильно страшно. А как лучше реализовывать это, если делать серьёзный программный продукт?
|
#6
|
||||
|
||||
Цитата:
Код:
if st='Артём' then begin if par='artem' then begin ShowMessage('Зравствуйте, Артём! У вас высший уровень доступа!'); RadioButton1.Visible:=... end else begin ShowMessage('Пароль введен не верно, осталось ... end; end else if st='Максим' then begin if par='maxim' then begin ShowMessage('Зравствуйте, Максим! Вам доступны секретные данные!'); RadioButton1.Visible:=... end else begin ShowMessage('Пароль введен не верно, осталось ... end; end else if st='Александр' then begin if par='sasha' then begin ShowMessage('Зравствуйте, Александр! Вам доступны открытые данные!'); RadioButton1.Visible:=... end else begin ShowMessage('Пароль введен не верно, осталось ... end else if st=... А вообще массив здесь так и напрашивается. Или же отдельная таблица базы данных. |
#7
|
||||
|
||||
Цитата:
Код:
var errcnt: integer = 3; ms: array[0..2] of array[0..4] of string = (('Артём','Максим','Александр','Владислав','Анатолий'), ('artem','maxim','sasha','vlad','tolik'), ('Здравствуйте, Артём! У вас высший уровень доступа!', 'Здравствуйте, Максим! Вам доступны секретные данные!', 'Здравствуйте, Александр! Вам доступны открытые данные!', 'Здравствуйте, Владислав! Вам доступны открытые данные!', 'Здравствуйте, Анатолий! Вам доступны секретные данные!')); procedure TForm1.Button1Click(Sender: TObject); var user, pwd, i :integer; begin user:= 0; pwd:= -1; for i:= 0 to 4 do begin if ComboBox1.Text = ms[0,i] then user:= i; if Edit1.Text = ms[1,i] then pwd := i; end; if pwd >= 0 then begin if user = pwd then begin { case user of 0: что-то делаем для каждого пользователя 1: 2: 3: 4: end; } errcnt:= 3; ShowMessage(ms[2, user]); end; end else begin Dec(errcnt); if errcnt = 2 then ShowMessage('Пароль введен не верно, осталось 2 попытки!'); if errcnt = 1 then ShowMessage('Пароль введен не верно, осталась 1 попытка!'); if errcnt = 0 then form1.Close; end; end; З.Ы. Посмотрел архив - у меня форматёр завис намертво кстати, у компонента Edit есть свойство PasswordChar, замените #0 на * и будут звёздочки вместо пароля Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 01.03.2014 в 03:19. |
#8
|
||||
|
||||
Цитата:
Имена и их конфигурации должны быть во внешнем (шифрованном) файле или базе и загружаться при старте программы. Пароли - в виде хешей, тоже где-то снаружи. Далее нужно найти пользователя (пройти по загруженному массиву и сравнить), потом проверить соответствующий пароль. Подгрузить соответствующую конфигурацию (в данном случае конфиг - требуемые RadioButton'ы). Все это делается легко и просто. А вот если продукт действительно серьезный - то нужно защитить информацию в файле от несанкционированной модификации и привязать выполнение любой операции к правильности пароля и конфига. Чтобы нельзя было тупо найти окна радиобаттонов и сделать их видимыми снаружи программы. jmp $ ; Happy End! The Cake Is A Lie. |