Тестовое задание для Frontend-разработчика с реализацией аутентификации, авторизации и RBAC (Role-Based Access Control).
- React 18+ - функциональные компоненты и хуки
- React Router v6 - клиентская маршрутизация
- TypeScript - строгая типизация
- Styled Components - CSS-in-JS стилизация
- Vite - быстрая сборка и dev-сервер
- Context API - управление состоянием аутентификации
- JWT - токены для аутентификации
Система поддерживает 4 роли пользователей с различными правами доступа:
-
Администратор компании (
company_admin)- Полный доступ к управлению объектами, пользователями, финансами
- Просмотр статистики и аналитики
- Управление всеми разделами системы
-
Менеджер по аренде (
manager)- Работа с клиентами и объектами
- Управление заявками и просмотрами
- Список задач и планирование
-
Клиент (
client)- Личный кабинет с информацией об аренде
- Просмотр и оплата счетов
- Доступ к документам
-
Служба поддержки (
support)- Обработка запросов и тикетов
- Работа с обращениями пользователей
- База знаний
- Форма входа с валидацией email и пароля
- Моковый API для имитации backend
- JWT токены с сохранением в localStorage
- Автоматическая проверка валидности токена
- Кнопка выхода с очисткой данных
- React Router v6 с защитой маршрутов
- Автоматический редирект на страницу входа
- Роутинг на основе ролей (RBAC)
- Проверка прав доступа для каждой страницы
- Адаптивный дизайн (mobile-first)
- Уникальные дашборды для каждой роли
- Навигационное меню с фильтрацией по ролям
- Header с информацией о пользователе
- Красивые компоненты на Styled Components
- Node.js 18+
- npm или yarn
npm installили
yarn installnpm startили
yarn startПриложение будет доступно по адресу http://localhost:5173
Для входа в систему используйте следующие учетные данные:
- Email: admin@test.com
- Пароль: admin123
- Роль: Администратор компании
- Email: manager@test.com
- Пароль: manager123
- Роль: Менеджер по аренде
- Email: client@test.com
- Пароль: client123
- Роль: Клиент
- Email: support@test.com
- Пароль: support123
- Роль: Служба поддержки
Использован Context API вместо Redux для упрощения архитектуры. AuthContext предоставляет:
- Состояние пользователя и токена
- Методы login/logout
- Флаги isAuthenticated и isLoading
Компонент ProtectedRoute оборачивает защищённые страницы и:
- Проверяет аутентификацию пользователя
- Редиректит на /login если не авторизован (используя Navigate из react-router)
- Проверяет права доступа по ролям
- Показывает loader во время проверки
Маршрутизация настроена в App.tsx:
- BrowserRouter для клиентской навигации
- Routes и Route для определения маршрутов
- Navigate для программных редиректов
- NavLink для активной навигации с подсветкой
Файл mockApi.ts имитирует backend:
- Генерирует JWT токены
- Проверяет учетные данные
- Имитирует задержку сети
- Возвращает данные пользователя
Все стили написаны с использованием Styled Components:
- Изолированные стили компонентов
- Динамические стили на основе props
- Поддержка тем и переменных
- TypeScript типизация
Каждая роль имеет:
- Уникальный дашборд с релевантной информацией
- Свой набор пунктов меню
- Специфичные права доступа к страницам
- Цветовую схему и иконку
- Валидация форм - проверка email и пароля на клиенте
- Обработка ошибок - отображение ошибок входа
- Адаптивность - mobile-first подход
- Типизация - полная типизация TypeScript
- Модульность - разделение на переиспользуемые компоненты