|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] (C++ Builder) Программа аутентификации - проблема вызова диалоговых окон и сохранения |
|
|
C/C++ - [решено] (C++ Builder) Программа аутентификации - проблема вызова диалоговых окон и сохранения
|
Новый участник Сообщения: 44 |
Профиль | Отправить PM | Цитировать Здравствуйте, еще раз.
Помогите, пожалуйста, написать программу разграничения полномочий пользователей на основе парольной аутентификации. Программу пишу в C++ Builder 6. Условия задачи Большую часть функций программы я уже сделал, осталось реализовать интерфейс и режим доступа пользователь/админ. С этим есть небольшие проблемы, не могу понять, как из одного диалогового окна вызвать другое, в частности как сделать так, чтобы при щелчке в пункте меню «Смена пароля», открылось окно для смены пароля текущего пользователя (не стандартное, а созданное мной, допустим «Form3»). И второе, как лучше реализовать сохранение текущей сессии, то есть, чтобы программа помнила под каким пользователем мы в нее зашли. Я думал, что можно создать глобальную переменную, в которой хранить имя текущего пользователя, только не знаю как можно использовать эту переменную из разных форм. |
|
Отправлено: 05:49, 05-11-2008 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать пункты 1-5:
http://rsdn.ru - Статьи - безопасность - Класс для работы с паролями. Язык немного отличается (.NET), но принцип должен быть понятен. Я как то использовал данный класс, тоже была авторизация для админа и пользователя с разграничением прав. И вообще полазийте по rsdn, данный форум очень авторитетен в плане программирования. Цитата Luzuk:
1. Скрытие основной формы (MainFrm.Hide()) 2. Отображение Вашей формы ( ChildFrm.ShowDialog() или ChildFrm.ShowModal() ) 3. В дочерней форме уже идет реализация того что вам нужно. Должна быть кнопка Выход или крестик закрытия формы. 4. После ChildFrm.ShowDialog() вновь отображаете Вашу основую форму MainFrm.Show()l Вот примерно так. При входе в программу запрашиваете имя и пароль. В случае успеха проверяете в своем файле, является ли данная учетка админской. Если да, то, например, можно отображать нужные пункты меню, либо, если это простой пользователь, ненужные ему опции можно сделать Disable. |
|
------- Отправлено: 06:54, 05-11-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Ну, это все понятно, только дело в том, что я не знаю, как в Билдере сделать окно дочерним, чтобы потом к нему можно было обращаться.
Алгоритм работы программы мне полностью понятен, вот только с реализацией не идет. К примеру, я могу на действие "нажатие кнопки" поставить Form1->Visible=false;, тогда окно Form1 исчезнет, но это действие можно делать только внутри этой формы, а мне нужно, чтобы что-то подобное я мог сделать из другой формы. То есть, мне нужно, чтобы при нажатии на кнопку в Form1, открывалась Form2. Если я в обработчике нажатии кнопки, в Form1, пишу Form2->Visible=true, выдается ошибка, что он не знает что такое Form2. Значит к Form2 нужно как-то по другому обращаться, либо использоваться другое обращение. Скорей всего для этого нужно использовать функцию какую-нибудь, возможно CreateDialog() или CreateWindowEx(). Только не знаю, что в эту функцию в качестве параметров вводить. |
Последний раз редактировалось Luzuk, 05-11-2008 в 07:43. Отправлено: 07:28, 05-11-2008 | #3 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать ну тогда гугл в помощь:
http://wincmd.ru/article/ListSimpleBcb.html цитата оттуда: Цитата:
ну или просто вот так |
|
------- Отправлено: 07:59, 05-11-2008 | #4 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Delirium, Спасибо!
а то я ищу ищу... и ничего полезного так и не нашел... Правда искал по другим ключевым полям. |
|
Отправлено: 08:15, 05-11-2008 | #5 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Забавно.
Все оказалось гораздо проще. Нужно было всего лишь в Unit1.cpp добавить Тогда без проблем можно обращаться к Form2. Подробней |
Отправлено: 08:58, 05-11-2008 | #6 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Радует, что Вы сами нашли решение своей проблемы, заодно заполнив небольшой пробельчик в знании языка
Если вопрос закрыт, отметьте тему решенной ("Настройки темы" вверху страницы - отметить решенной) |
------- Отправлено: 09:02, 05-11-2008 | #7 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Delirium, Ну я еще не все сделал, возможно скоро еще вопросы появятся.
Как программа полностью доделаю, отпишусь здесь Еще не проверял по поводу того, где лучше хранить запись о текущем пользователе. Я просто создал файл "users.h" с глобальной переменной (char session_user[16]), в которой храниться идентификатор пользователя. Этот файл прикрепил ко всем .cpp файлам проекта (#include "users.h"). Это сработало, хотя вроде бы так делать не очень правильно, у меня сразу вышло предупреждение: [Linker Warning] Public symbol '_session_user' defined in both module D:\KEEPER\MY PROGS\LOGIN_PASS_0\UNIT1.OBJ and D:\KEEPER\MY PROGS\LOGIN_PASS_0\UNIT2.OBJ Хотя стоить учесть, что программа носит чисто демонстрационный характер, для демонстрации аутентификации, а также работы с файлами, так что безопасность и эстетика реализации тут не так уж и важна. PS Спасибо что подсказал, как можно пометить тему что задача решена, а то я не знал, и об этом модераторов просил |
Отправлено: 09:41, 05-11-2008 | #8 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Нет, не получилось использовать глобальную переменную для обмена информацией между Формами.
Делал так, есть две формы: Form1 и Form2. Также есть файл "users.h", в котором находиться переменная для хранения имя пользователя. В Form1 вводим имя пользователя, после чего открываем Form2 и там по этому имени (что мы ввели в Form1) должен происходить его поиск в файле. Но этого не происходит, т.к. Form1 не смог ни чего записать в эту переменную. ниже привожу краткий листинг этих файлов: |
Отправлено: 11:02, 05-11-2008 | #9 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Ну и не парьтесь вы с этими заголовками. Есть 2 варианта.
1. Самый тупой и простой - при вводе имени пользователя сохранять его в пустой текстовый файл. Если файл есть, переписать его. Таким образом, в текстовике всегда будет лежать имя последнего пользователя. 2. Сохранять имя не в файле, а в реестре, создать программно ветку в HKEY_CURRENT_USER\Software и также точно считывать. |
------- Отправлено: 01:03, 06-11-2008 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Программа для сохранения истории обращения к различным "машинам" в сети. | pingUIN | Хочу все знать | 1 | 09-11-2009 23:51 | |
[решено] Программа для сохранения картинок с сайта - помогите неполучается ... | FlatX007 | AutoIt | 3 | 21-10-2009 07:34 | |
Программа для сохранения и последующего восстановления настроек ОС | TechnoTrasher | Microsoft Windows NT/2000/2003 | 8 | 14-09-2006 07:40 | |
Программа для сохранения кадров из фильма | XPurple | Видео и аудио: обработка и кодирование | 7 | 30-04-2005 13:37 | |
Потеря фокуса диалоговых окон | Kins | Microsoft Windows NT/2000/2003 | 8 | 01-09-2003 09:45 |
|