a68331c86b
- PROJECT_STATUS: что сделано (черновики, версии, разбор, каталог) и планы - DEV_CONTOUR_USER_GUIDE: сценарии для проверяющих на dev-стенде - README, ТЗ, card1, журнал, бэклоги, шаги 01–11+README, спринты, TEST_TABLES: ссылки и примечания - backend/PROGRESS: ссылка на PROJECT_STATUS Made-with: Cursor
62 lines
1.7 KiB
Markdown
62 lines
1.7 KiB
Markdown
# Шаг 3: Аутентификация и авторизация
|
|
|
|
## Цель
|
|
|
|
Реализовать систему входа в систему и разграничения прав доступа.
|
|
|
|
---
|
|
|
|
## Задачи
|
|
|
|
### 3.1. Аутентификация
|
|
|
|
- **Эндпоинт:** `POST /api/auth/login`
|
|
- Принимает: `{ login, password }`
|
|
- Возвращает: JWT токен в httpOnly cookie
|
|
- Проверка пароля через bcrypt
|
|
|
|
### 3.2. Выход
|
|
|
|
- **Эндпоинт:** `POST /api/auth/logout`
|
|
- Очищает cookie с токеном
|
|
|
|
### 3.3. Защита роутов (Middleware)
|
|
|
|
- Проверка валидности JWT
|
|
- Извлечение user_id и роли из токена
|
|
|
|
### 3.4. Права доступа (RBAC)
|
|
|
|
| Роль | Доступ |
|
|
|------|--------|
|
|
| HR | Все операции |
|
|
| Manager | Своё подразделение |
|
|
| Employee | Только свои данные |
|
|
|
|
### 3.5. Middleware авторизации
|
|
|
|
```javascript
|
|
// Проверка роли
|
|
function requireRole(roles: string[]) {
|
|
// Проверяет, что user.role входит в массив roles
|
|
}
|
|
|
|
// Проверка подразделения (для manager)
|
|
function requireDepartment(departmentId: string) {
|
|
// Проверяет, что user.department_id === departmentId
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Результат
|
|
|
|
- Работающий вход по логину/паролю
|
|
- Защищённые API роуты
|
|
- Разграничение прав по ролям
|
|
|
|
|
|
---
|
|
|
|
*Актуальная привязка к коду: [../PROJECT_STATUS.md](../PROJECT_STATUS.md) · индекс шагов: [README.md](README.md).*
|