# Модуль № 3: Проектирование и разработка информационных систем

## Текст задания: 

Для выполнения задания рекомендуется создать в базе данных таблицу "Пользователи". Если такая таблица уже существует, необходимо внести некоторые изменения для реализации дальнейшего функционала приложения.

Разработайте форму для авторизации зарегистрированных пользователей с ролями "Администратор" и "Пользователь".

Форма должна содержать текстовые поля логин, пароль и кнопку "Войти". Поля "Логин" и "Пароль" должны быть обязательными для заполнения. При неверно введенных данных, пользователь должен получить сообщение об ошибке "Вы ввели неверный логин или пароль. Пожалуйста проверьте ещё раз введенные данные".

После успешной авторизации пользователь должен получить сообщение "Вы успешно авторизовались".

При аутентификации связка «логин/пароль» должна совпадать с одной из записей в таблице "Пользователи".

При первой успешной авторизации по выданному паролю администратором должна выводится форма для смены пароля. 

Форма должна включать текущий пароль, новый пароль, подтверждение нового пароля. Все поля обязательные для заполнения. После заполнения формы и нажатия кнопки "Изменить пароль", система должна проверить правильность введенного текущего пароля и совпадение нового пароля с подтверждением.

В случае ошибок при заполнении формы пользователю должно выводиться сообщение об ошибке. В случае успешного изменения пароля, пользователю должно выводиться сообщение об успешной смене пароля.

Если в течении 3-х раз подряд был неверно введен логин/пароль, то учетная запись блокируется и при повторном авторизации должно появляться сообщение "Вы заблокированы. Обратитесь к администратору".

Так же учетная запись должна блокироваться если пользователь не авторизовался в течении 1 месяца.

На рабочем столе пользователя с ролью "Администратор" предусмотрите функционал для добавления новых пользователей, изменения данных текущих пользователей (включая снятие блокировки).
 
При добавлении нового пользователя следует проверять его наличие в базе данных.

В случае, если пользователь с указанным логином уже существует, должно выводиться соответствующее сообщение.

Графический интерфейс необходимо разработать в соответствии с требованиями к разработке.

Разработайте проектную документацию на разработанный функционал.

Включите описание функционального назначения, используемые методы с указанием параметров.

Необходимые приложения: [Требования к разработке.pdf](./Требования%20к%20разработке.pdf)

## Реализация

### Доработка таблицы **User** (Пользователи)

Необходимо добавить поля:

- логин
- пароль
- дата создания (чтобы отслеживать 30 дней на первую авторизацию)
- признак блокировки аккаунта (можно совместить со счетчиком неуспешных авторизаций и признаком активности)

![](../solution/module3_01.png)

**Логин** и **пароль** я сделал обязательными, но можно делать не обязательными, тогда и значение по-умолчанию не нужно.

**Дата создания** обязательное поле типа DATETIME со значением по-умолчанию CURRENT_TIMESTAMP

**Количество блокировок** является одновременно признаком успешной авторизации (`-1`) и количеством неуспешных (`>= 0`)

Окно авторизации мне рисовать лень. Реализацию можете посмотреть в [Задание модуль_3 Авторизация.pdf](../solution/Задание%20модуль_3%20Авторизация.pdf), только работу с базой реализуте сами.
