Перейти к основному содержимому

Безопасность

Модель аутентификации

WMS использует JWT-токены для аутентификации. Система имеет 3 независимых security filter chain, по одному для каждого API.

Три API и их аутентификация

APIПрефиксАутентификацияАудитория
Employee API/employee-api/JWT-токен от /auth/login (логин + пароль сотрудника)Операторы склада, менеджеры
Merchant API/merchant-api/Фиксированный API-ключ мерчанта (Bearer token)Внешние системы, интеграторы
System API/system-api/Системная аутентификацияАдминистраторы

Employee API: получение токена

POST /employee-api/auth/login
Body: { "login": "...", "password": "..." }
Response: { "token": "eyJ..." }

Дополнительные endpoint'ы:

  • POST /auth/change-warehouse — смена текущего склада
  • POST /auth/change-workspace — смена рабочего пространства

Конфигурация

Класс ApiSecurityConfig определяет 3 SecurityFilterChain. Каждая цепочка:

  1. Матчит URL-паттерн (/employee-api/**, /merchant-api/**, /system-api/**)
  2. Применяет соответствующий фильтр аутентификации
  3. Настраивает CORS, CSRF, session management

Авторизация

Роли и привилегии

  • Employee связан с Role
  • Role содержит набор привилегий
  • Привилегии привязаны к складу — проверяются с учётом текущего склада
  • Method-level авторизация через MethodSecurityConfig

Контроль доступа в формах

Каждый Template (ListTemplate / EditTemplate) принимает 4 привилегии:

  • read — просмотр
  • create — создание
  • update — редактирование
  • delete — удаление

Методы isReadAllowed, isCreateAllowed, isUpdateAllowed, isDeleteAllowed проверяют привилегии текущего пользователя.

Multi-tenancy (изоляция мерчантов)

Механизм

  1. @Filter(name = "merchantFilter") на BaseDoc — Hibernate автоматически фильтрует запросы
  2. MerchantFilterAspect — AOP-аспект, включающий фильтр на уровне сессии
  3. SecurityUtil — предоставляет текущего пользователя, мерчанта, склад из Security Context

Гарантии

  • Все запросы к документам автоматически ограничены текущим мерчантом
  • Мерчант устанавливается при создании документа из Security Context
  • Невозможно получить доступ к документам другого мерчанта через API

Ключевые классы

КлассРоль
ApiSecurityConfigКонфигурация 3 security filter chains
JwtTokenServiceГенерация и валидация JWT-токенов
EmployeeDetailsServiceЗагрузка данных сотрудника для аутентификации
SecurityUtilПолучение текущего пользователя/мерчанта/склада
MerchantFilterAspectAOP для автоматического включения фильтра мерчанта
MethodSecurityConfigMethod-level авторизация