|
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
|
|
Хранить строку в приложении14.01.2022, 12:58. Показов 11153. Ответов 209
Метки нет (Все метки)
Всем привет. Помогите, пожалуйста с курсовой.
Значит задача: Создать приложение с пользовательским доступом (логин/пароль, пользователь может быть пользователем, может быть админом). Значит я делаю следующим образом: В программу уже вшит пользователь "Администратор", при первом запуске предлагается создать ему пароль. Как только пароль создан рядом с приложением создается папка "Users" (по ее наличию, собственно, и проверяется первый запуск), где в файлах в зашифрованном виде хранится информация о пользователе. Препод говорит, что это не совсем правильное решение, и файла с данными "Администратор" в папке с пользователями быть не должно, так как (цитирую дословно) "Я скопирую пользователей в другое место, прибью папку Users, запущу программу и получу доступ к Администратору, снова введя пароль, потом верну пользователей назад" ![]() Можно ли как то хранить строковую переменную внутри приложения? Или может еще где-то. Или может какой-то другой метод хранения данных о пользователях есть? Буду очень благодарна за советы. Спасибо
0
|
|
| 14.01.2022, 12:58 | |
|
Ответы с готовыми решениями:
209
Как и в каком виде хранить файлы в приложении
Как правильно хранить и использовать константы в WPF приложении |
|
Модератор
|
||
| 29.01.2022, 20:17 | ||
|
Вне приложения любые библы - это просто код. Сущности могут генерироваться только приложением в рунтайме. Другой вопрос - это зависимости между разными объектами (в том числе сущностями) в приложении. Здесь уже требуется более чёткая терминология, так просто "Приложение" - это по сути любой код используемый приложением.
0
|
||
|
|
|||||||
| 30.01.2022, 07:51 | |||||||
0
|
|||||||
|
|
|||||||||||||
| 30.01.2022, 09:37 | |||||||||||||
|
Вообще, я считаю, что обе концепции имеют право на существование. Пример номер раз: В приложении (WF) пользователь создал класс User примерно такого содержания:
Теперь, по запросу WF сервис ему возвращает пользователей в виде списка объектов... (!) User? Нет. Иначе придется вставлять затычку в поле Password, ведь ни хеши ни тем более пароли пользователей сервис НЕ возвращает! Т.е. нужен уже "другой" класс User, с двумя полями Name и Type. Пример номер два: Некий разработчик пишет форточку для управления пользователями. Я пишу ядро, которое вобщем-то ими и управляет, авторизует, пишет в файл или в БД и т.п. Я не вижу ни форточки ни того разработчика, но мы условились, что, при авторизации я принимаю в метод только string name и string password. А при запросе возвращаю массив пользователей в виде объектов класса User с двумя полями: Имя и Роль. И мне на самом деле не важно какие там сущности плодит разработчик в своей программе, как он будет использовать возвращенный мной массив пользователей - суть одна: он так или иначе должен будет привести свои сущности к тому виду, который указал я (ну, или о которых мы договорились изначально). Для этого, как минимум, его приложение должно понять то, что я ему верну, и для этого я предоставил ему открытый класс User. А если тех разрабов будет штук 10 и у каждого свое видение ситуации? Да, можно сделать кучу перегрузок для каждого из них, но так или иначе все будет ограничено некоторыми рамками, в которые можно упереться и дальше ни как.. Ну и потом, кто мне запрещает диктовать свои условия, как разработчику "сервиса". Напомню - обособленного сервиса, а не в составе всего остального. Добавлено через 8 минут P.S. чуть не дописал.. Да, возвращенный массив пользователей, конечно же, может иметь право на существование в приложении VM (WF), но вот куча объектов User с именами и паролями там явно лишняя. Они просто не нужны. При входе, вводится имя и пароль - все, дальше пароль "затирается". Это к вопросу limeniye о том, зачем я инкапсулировал пользователей в библиотеку. Да из базы достал или из файла, и храню их, пока кто-то не войдет в систему и не попросит их. Или в этом подходе снова что-то не так?
0
|
|||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 30.01.2022, 13:16 | |
|
wizard41, нееет. Вы путаете. Есть User, а есть его данные для авторизации. У User'а нет свойства Password.
1
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 30.01.2022, 14:30 | |
|
wizard41, очень даже хороший вариант!
0
|
|
|
|
||||||
| 30.01.2022, 14:54 | ||||||
|
Ну логично.
Тогда создание и авторизация превращаются в
0
|
||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 30.01.2022, 15:26 | |
|
wizard41, да нет, сделайте просто enum доступа и передайте в LoginData, если по простому.
0
|
|
|
Модератор
|
|||||
| 30.01.2022, 15:34 | |||||
|
Вот вы набрали в форме авторизации логин и пароль. Нажали "вход". При переходе к следующей странице, какие ещё действия в GUI должны выполняться? Очевидно же что эти действия зависят от результата авторизации и, до получения этого результата, GUI должен быть заморожен. То есть диалог авторизации должен быть модальным. Наверное, можно придумать ккие-то исключительно редкие случаи где это не так. Но мне они даже в голову не приходят. Добавлено через 4 минуты И без уточнения терминологии дальнейшая дискуссия - это тупиковый путь. приложение, использующее библиотеку - вообще, даже смысла этого не понимаю.Что это означает? Вот у вас есть Решение, в нем проект WPF View, WPF App, VM Core, подключенные пакеты и зависимости м пр. Что из этого вы считаете Приложением, а что библиотекой? Добавлено через 2 минуты Мо феншую может использоваться только для разовой передачи данных между слоями или быть инкапсулированной сущностью внутри слоя.
0
|
|||||
|
|
|
| 30.01.2022, 15:39 | |
|
Элд Хасп, ну не придирайтесь ) Я думаю вы меня прекрасно поняли. "Приложение" - это то, чего у меня нет. А библиотека - то что есть. Я понимаю что все это в куче тоже приложение. Ну назвал я клиентское окно приложением - разве это не так? Если угодно - приложение это *.exe , а библиотека *.dll
0
|
|
|
Модератор
|
|||
| 30.01.2022, 15:43 | |||
|
А второе, то есть вывод - не верно. Так как User мутабельный, то сохранять ссылку на него в сервисе бессмысленно (чревато багами). Но вполне можно клонировать (отразить) экземпляр и хранить его клон. А перед возвратом списка передавать не внутренний список, а его отражение (глубокую копию). Получится, что у вас один и тот же класс выступает при обмене данными как DTO, а при хранении данных в сервисе, как сущность. Но так обычно не делают, так как при таком использовании большая вероятность путаницы и, как следствие, ошибок и багов. Поэтому типы для DTO и Сущностей лучше именовать по разному. Добавлено через 2 минуты Просто мы зашли в такую область, где важно точно взаимопонимание. Иначе можно полсотни просто написать и в конце выяснить, что просто по разному трактуем одинаковой термин. Или наоборот одинаковое называем по разному.
0
|
|||
|
|
|||
| 30.01.2022, 15:54 | |||
|
Но в свете последних советов, логику можно и переорганизовать под отражение. Добавлено через 8 минут
0
|
|||
|
Модератор
|
|||
| 30.01.2022, 16:01 | |||
|
Вот так гораздо более конкретно. exe у нас (в WPF) ассоциируется с классом App и типами его уровня. Вся WPF View, даже если явно не выделена в отдельный проект, логически всё равно относится к "библиотеке". Здесь при разделении функционала важно определить какие сборки (библиотеки) дружественные, а какие нет. Дружественные - это те которые могут "влазить" в логику друг друга. На уровне Шарпа этому, примерно, соответствует модификатор доступа internal.Как реализовать.... Общего ответа здесь не дашь. Зависит от конкретной задачи, выбранной архитектуры, реализации. В "классическом" MVVM считаются, что все слои между собой "не дружат". А реализацию внутри слоёв MVVM не регламентирует. Примерная структура WPF MVVM Решения: Структура связей в WPF Решении Структура WPF решения Но в простых задачах это всё упрощают. Наприме очень часто реализуют Модель так, чтобы её можно было использовать сразу и как VM. Добавлено через 4 минуты Желательно это должен быть одноразовый уничтожаемый объект. Сформировали его в View, передали по цепочке ссылку на него до авторизации. Успешна или нет авторизация, в любом случае объект пароля должен быть уничтожен. Хранить его поле попытки авторизации - бесмыслица. Добавлено через 1 минуту Поэтому, именно для авторизации лучше передать отдельно два стринга. Или для пароля даже использовать char[], который после авторизации будет затираться.
0
|
|||
|
|
||||
| 30.01.2022, 16:05 | ||||
|
В данном случае у ТСа формы и в случае чего код придется брать тоже с форм. Добавлено через 1 минуту
0
|
||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||
| 30.01.2022, 16:06 | ||||||
|
Под enum я подразумевал следующее
0
|
||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 30.01.2022, 16:08 | ||
0
|
||
|
|
|||
| 30.01.2022, 16:09 | |||
|
Но есть и свои пара проектов почти MVC. Старался, во всяком случае.
0
|
|||
|
Модератор
|
|||
| 30.01.2022, 16:12 | |||
![]() Добавлено через 2 минуты wizard41, требования по безопасности какие? Имею ввиду для пароля. Надо просто его скрыть в GUI или обеспечить безопасную передачу с шифрованием?
0
|
|||
| 30.01.2022, 16:12 | |
|
Где хранить информацию в WPF приложении чтобы её можно было переносить с приложением на любой компьютер? Где лучше хранить строку подключения к sql? Как хранить переменную в приложении Где лучше хранить рисунки в приложении? Как хранить в приложении большой объем текста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
Сразу отвечу: А в PvP с ним. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|