Пояснительная записка
1. Общие сведения о проекте
Наименование проекта:
DairyDemo.Auth — модуль авторизации информационной системы
Тип приложения:
Настольное приложение (Windows Forms)
Язык программирования:
C#
Платформа:
.NET 8.0 (Windows)
СУБД:
MySQL
Назначение проекта:
Реализация механизма авторизации пользователей с разграничением ролей,
интерактивной капчей и системой блокировки учётных записей.
2. Функциональное назначение системы
Разрабатываемая информационная система предназначена для:
- аутентификации зарегистрированных пользователей;
- разграничения доступа по ролям Администратор / Пользователь;
- защиты от автоматизированного подбора паролей с помощью капчи;
- блокировки учётных записей при превышении допустимого числа неудачных попыток входа;
- администрирования пользователей (добавление, изменение, снятие блокировки).
Система используется в рамках учебного проекта и демонстрирует реализацию типового модуля безопасности информационной системы.
3. Основные функции системы
3.1. Авторизация пользователя
Описание:
Проверка корректности логина и пароля пользователя с учётом прохождения капчи.
Входные данные:
- логин (строка);
- пароль (строка);
- результат прохождения капчи (логическое значение).
Результат:
- успешная авторизация и переход на рабочий стол;
- сообщение об ошибке;
- блокировка учётной записи при превышении лимита попыток.
3.2. Интерактивная капча
Описание:
Графическая капча в виде пазла 2×2, собираемого пользователем вручную.
Назначение:
- защита от автоматизированных атак;
- подтверждение участия человека в процессе авторизации.
Результат:
- разрешение продолжения авторизации;
- отказ при неверной сборке изображения.
3.3. Блокировка учётной записи
Описание:
Автоматическая блокировка пользователя при трёх подряд неудачных попытках входа.
Условия блокировки:
- неверно введён пароль;
- неверно собрана капча.
Результат:
- запрет дальнейшей авторизации;
- уведомление пользователя о необходимости обращения к администратору.
3.4. Администрирование пользователей
Описание:
Управление учётными записями пользователей через интерфейс администратора.
Функции администратора:
- просмотр списка пользователей;
- добавление новых пользователей;
- изменение логина и роли;
- смена пароля;
- снятие блокировки учётной записи.
4. Архитектура и структура проекта
Проект реализован с разделением на логические слои:
- Data — доступ к данным и модели;
- Services — бизнес-логика;
- UI — пользовательский интерфейс.
Такой подход обеспечивает модульность, расширяемость и удобство сопровождения кода.
5. Описание используемых классов и методов
5.1. Класс Db
Назначение:
Создание соединений с базой данных MySQL.
Методы:
MySqlConnection CreateConnection()
````
**Параметры:** отсутствуют
**Результат:** объект соединения с БД
---
### 5.2. Класс `User` (модель данных)
**Назначение:**
Представление пользователя системы.
**Основные свойства:**
* `Id` — идентификатор пользователя;
* `Login` — логин;
* `PasswordHash` — хэш пароля;
* `Role` — роль пользователя;
* `FailedAttempts` — количество неудачных попыток входа;
* `IsLocked` — признак блокировки.
---
### 5.3. Класс `UserRepository`
**Назначение:**
Выполнение операций доступа к данным пользователей.
**Основные методы:**
```csharp
Task<User?> GetByLoginAsync(string login)
Получение пользователя по логину.
Task<List<User>> GetAllAsync()
Получение списка всех пользователей.
Task AddUserAsync(string login, string passwordHash, string role)
Добавление нового пользователя.
Task IncrementFailedAttemptsAndLockIfNeededAsync(long userId)
Увеличение счётчика попыток и блокировка при необходимости.
Task UnlockAsync(long userId)
Снятие блокировки учётной записи.
5.4. Класс PasswordService
Назначение: Хэширование и проверка паролей.
Методы:
string HashPassword(string password)
Хэширование пароля с использованием BCrypt.
bool Verify(string password, string hash)
Проверка соответствия пароля сохранённому хэшу.
5.5. Класс AuthService
Назначение: Реализация логики авторизации.
Основной метод:
Task<(bool ok, string message, User? user)> LoginAsync(
string login,
string password,
bool captchaOk
)
Параметры:
login— логин пользователя;password— введённый пароль;captchaOk— результат прохождения капчи.
Результат:
- признак успешной авторизации;
- сообщение для пользователя;
- объект пользователя.
5.6. Пользовательский контрол CaptchaPuzzleControl
Назначение: Реализация интерактивной капчи в виде пазла.
Основные элементы:
PictureBox;TableLayoutPanel.
Свойства:
IsSolved— признак корректной сборки изображения.
5.7. Формы пользовательского интерфейса
LoginForm— форма авторизации;UserForm— рабочий стол пользователя;AdminForm— панель администратора.
Каждая форма реализует строго ограниченный набор функций в соответствии с ролью пользователя.
```