|
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
|
|
Хранить строку в приложении14.01.2022, 12:58. Показов 11051. Ответов 209
Метки нет (Все метки)
Всем привет. Помогите, пожалуйста с курсовой.
Значит задача: Создать приложение с пользовательским доступом (логин/пароль, пользователь может быть пользователем, может быть админом). Значит я делаю следующим образом: В программу уже вшит пользователь "Администратор", при первом запуске предлагается создать ему пароль. Как только пароль создан рядом с приложением создается папка "Users" (по ее наличию, собственно, и проверяется первый запуск), где в файлах в зашифрованном виде хранится информация о пользователе. Препод говорит, что это не совсем правильное решение, и файла с данными "Администратор" в папке с пользователями быть не должно, так как (цитирую дословно) "Я скопирую пользователей в другое место, прибью папку Users, запущу программу и получу доступ к Администратору, снова введя пароль, потом верну пользователей назад" ![]() Можно ли как то хранить строковую переменную внутри приложения? Или может еще где-то. Или может какой-то другой метод хранения данных о пользователях есть? Буду очень благодарна за советы. Спасибо
0
|
|
| 14.01.2022, 12:58 | |
|
Ответы с готовыми решениями:
209
Как и в каком виде хранить файлы в приложении
Как правильно хранить и использовать константы в WPF приложении |
|
|
|||||||||||||||||
| 28.01.2022, 16:49 | |||||||||||||||||
|
Добавлено через 3 часа 19 минут limeniye, вероятно, вы имели в виду нечто такое: в классе UManager:
0
|
|||||||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||||||||||||||||
| 28.01.2022, 19:09 | |||||||||||||||||||||
|
неееет.
Писал от руки, могут быть ошибки.
Это простая реализация. Но посыл примерно такой. А Ваш код, опять же, нарушает гибкость. Добавлено через 1 минуту это во-первых. Во-вторых. Что у Вас с разметкой? Почему так ужасно? Добавлено через 38 секунд wizard41, забыл отметить*
0
|
|||||||||||||||||||||
|
|
|||||||
| 28.01.2022, 19:22 | |||||||
|
limeniye, нуууу вы затеяли конечно ))
Я мог бы еще хуже навертеть, но в рамках задачи этого наверное не стоит делать. И зачем вы вытащили наружу AuthorizationService?У меня затея была такая: сама авторизация происходит внутри библиотеки и ее реализацию пользователь не видит и (!) не инициирует ее сам, тем более, не создает объектов ее класса. Ему лишь передается результат работы той или иной функции. В частности, выбор и структуру сообщения об удачном/не удачном входе он сам уже решает что и как выводить, на основании булева или еще какого значения.
Смысл в том, чтобы конечному пользователю было наиболее просто выполнять те или иные методы, не вдаваясь в подробности как и что объявлять, инициировать и т.п. P.S. Сам сервис авторизации внутри работает через интерфейс, инициируется конструктором UManager класса и работает от его команд, которые, в свою очередь, запрашивает пользователь "сверху". Но все это надо еще причесывать... Добавлено через 1 минуту
0
|
|||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||
| 28.01.2022, 19:31 | |||
|
Добавлено через 1 минуту
0
|
|||
|
|
|
| 28.01.2022, 19:33 | |
|
Пользователь видит только выделенный класс:
А вся остальная галиматья происходит без его ведома ) Но я чуть более вникну в суть кода, вами написанного, может быть пригодится при внимательном осмотре внутренних реализаций.
0
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||
| 28.01.2022, 19:39 | ||||
|
Добавлено через 1 минуту Но я писал с телефона и упростил создание ещё одного класса. Добавлено через 2 минуты
0
|
||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 28.01.2022, 19:41 | ||
|
0
|
||
|
|
|||
| 28.01.2022, 19:45 | |||
|
Форма говорит: "дай-ка мне вон того юзверя!"
А библа отвечает: "фиг тебе, ты кто такой?" То есть в форма и знать не знает как там что получается, но должна выполнять то, что от нее требуют. Добавлено через 57 секунд Добавлено через 1 минуту ![]() Да я не особо обращаю внимания на это. Определенных стилей придерживаюсь только в командной разработке, но такое бывает не часто.
0
|
|||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 28.01.2022, 19:46 | ||
|
Пользователь нажал "Выйти". Если Вы сделали не таким способом, как я показал, значит только то, что у Вас в каждом методе будет условия: авторизирован пользователь, или нет. И не забывайте, что в программах не только пользователь, а ещё куча других сущностей. Вы будете проверять каждую? Так у Вас просто срабатывает событие, которое всей программе оповещает что пользователь вышел: кнопка "выход" меняется на "вход", некоторые элементы уничтожаются, где-то срабатывает Dospose и т.д. И всё это -- автоматически. А когда Вы делаете "напрямую" -- Ваши классы будут огромных размеров, а толку?
0
|
||
|
|
|||||||||
| 28.01.2022, 21:33 | |||||||||
|
У меня сделан некий транзитивный подход, когда команды "верхнего звена" дергают нужные методы в предоставленном классе, а уже он, в свою очередь, управляет внутренними методами. Да, советы учту конечно ваши, просто я не сижу по 3 часа над этим, так, 15 минут какую-то мысль прикинул, пару строк написал и ушел по другим делам. Потом вернулся, еще и забыл что я там хотел.... И начинается рефакторинг... Добавлено через 1 минуту Кликните здесь для просмотра всего текста
Добавлено через 1 час 20 минут limeniye, проще говоря, Вы предложили событийную модель оповещения о регистрации, я же, довольствовался простыми возвратами из методов. В конце концов, среагировать на событие или возврат результата метода форма сможет в любом случае: тут уже реализация в самой форме. Не стоит забывать еще о том, что надо знать кто именно залогинен, т.к. простой User создающий администраторов будет выглядеть не очень. Ладно, этот момент еще требует доработок, додумываний... В настоящий момент меня интересует другой нюанс: раньше класс User был публичный, для общего понимания между библой и приложением, использующим ее. Т.е. "фронтенд" мог создавать пользователей User user = new User(...); и управлять ими на уровне своего приложения, т.к. на уровне библиотеки он с ними ничего поделать не мог, не авторизовавшись.В итоге я от такой идеи отказался, полностью скрыв класс User от "наружного видения" - он используется только внутри библы в списке пользователей. Но сделал общую структуру, которая и передается в методы для добавления нового пользователя, и возвращается в качестве результата списком структур. Ну и вопрос в том, а надо ли было делать такие "преобразования", или можно было оставить открытым класс User...? Но как-то запретить создание экземпляров вне библиотеки? Добавлено через 11 минут Прихожу к выводу, что организацию хранения данных о пользователе внутри dll нужно сделать по другому. А класс User действительно вытащить наверх, для однозначности между библой и приложением.
0
|
|||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 28.01.2022, 23:07 | ||
|
Но это было так давно, что возможно я не правильно понял. Самому интересно. Я вызываю тебя, Элд Хасп .
0
|
||
|
Модератор
|
||
| 28.01.2022, 23:37 | ||
|
А по последним не понял из чего спор разгорелся. И у меня предложение, к вам обоим (в т.ч. wizard41). Тема как мне кажется уже давно вышла за рамки вопроса в топе. Наверное стоит её разделить. С какого поста стоит выделить в отдельную тему?
0
|
||
|
|
|||
| 28.01.2022, 23:50 | |||
|
0
|
|||
|
Модератор
|
|||
| 29.01.2022, 00:05 | |||
|
Какая-то внешняя библа? Ну, тогда она сама и задаёт правила общения. Есть какие-то параметры для создания пользователя. В простейшем виде Логин и Пароль. Передаются в библу, она возвращает результат регистрации и готового пользователя. Можно вернуть их в одном типе. Так как регистрация пользователя это модальный диалог, то здесь даже никакой асинхронности не нужно. Она только вредить будет.
0
|
|||
|
|
|||
| 29.01.2022, 00:10 | |||
|
Кое-что начинает проясняться, ок.
0
|
|||
|
Модератор
|
||
| 29.01.2022, 00:30 | ||
|
Для повышенной безопасности из библы приходит открытый ключ, которым зашифровываются логин и пароль.
И уже зашифрованные передаются в библу. Пример подобной реализации: Присоединённые свойства (Attached Property) для PasswordBox: привязка Password и безопасная работа с паролем. Но в большинстве случаев хватает обычного TextBox с маскирующим шрифтом: Реализация TextBox с функцией Скрыть/Показать пароль Добавлено через 6 минут Если это какая-то Бизнес Сущность, то нужно тогда её куда-то сначала отразить. Может быть и какая-то средняя реализация. Есть публичный интерфейс или тип с членами доступными всем. На их основе создаётся производный тип с дополнительными internal членами или явно реализующий internal интерфейс. Всё зависит от задачи. Что связанно с юзером в бизнес логике, какая информация нужна по нему внешним объектам, слоям и т.д. Добавлено через 4 минуты Библиотека же ничего не знает про приложение. Она может вернуть данные только в том типе о котором знает. У это уже задача приложения связать между собой разные библы так, что всё в целом заработало.
0
|
||
|
|
||
| 29.01.2022, 00:30 | ||
|
С отражением получалось, но хочется попроще.
0
|
||
| 29.01.2022, 00:30 | |
|
Где хранить информацию в WPF приложении чтобы её можно было переносить с приложением на любой компьютер? Где лучше хранить строку подключения к sql? Как хранить переменную в приложении Где лучше хранить рисунки в приложении? Как хранить в приложении большой объем текста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|