57 lines
1.5 KiB
Markdown
57 lines
1.5 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 роуты
|
|
- Разграничение прав по ролям
|