Добавление функций
Помимо ядра API и фронтендов, реальные проекты часто требуют дополнительных функций для обеспечения безопасности, контроля доступа и выполнения фоновых процессов.
Lino облегчает добавление этих возможностей стандартным образом, отражая их как на бэкенде (эндпоинты), так и на фронтенде (Blazor-приложения).
Безопасность и Аутентификация
Аутентификация является основой любой безопасной системы. Lino поддерживает аутентификацию на основе JWT (JSON Web Tokens) с использованием схемы Bearer в API.
Типичный процесс аутентификации:
1. Пользователь выполняет вход (через эндпоинт или специализированную страницу).
2. JWT создается с claims, представляющими личность, роли и права доступа.
3. Каждый запрос к API включает токен в заголовке: Authorization: Bearer <token>
4. Middleware аутентификации проверяет токен, включая подпись и срок действия.
Авторизация на основе политик
Lino использует политики (Policies) для реализации детализированной авторизации:
- Каждое действие может требовать конкретной политики (например: People.Read, People.Create).
- Политики настраиваются через AddAuthorization.
- Эндпоинты могут быть защищены с помощью объявления:
.RequireAuthorization
Добавление безопасности в проекты Lino
Чтобы добавить безопасность в проект, выполните:
lino features auth add
Интерактивный мастер CLI запросит следующие настройки:
- Сервис – сервис, в котором будут настроены ресурсы безопасности.
- Модуль – конкретный модуль, где будет установлена безопасность (только для модульных сервисов).
- Время жизни Access Token – срок действия токена доступа.
- Время жизни Refresh Token – срок действия токена обновления.
- Тип идентификатора пользователя – определяет тип данных, используемых как UserId (
int,longилиGuid).
Эти настройки гарантируют автоматическую конфигурацию конвейера аутентификации/авторизации, готового к использованию в API и интеграции с Blazor.
Фоновые задачи
Многие системы требуют выполнения асинхронных процессов в фоновом режиме, например:
- Отправка электронных писем
- Генерация отчетов
- Синхронизация с внешними системами.
Lino нативно поддерживает Hangfire в качестве оркестратора задач.
Преимущества Hangfire
- Надежное выполнение асинхронных задач.
- Встроенная панель мониторинга.
- Поддержка периодических и запланированных задач.
- Надежное сохранение задач в базе данных.
Интеграция событий с Outbox Message
Для обеспечения согласованности при асинхронной интеграции Lino использует паттерн Outbox Message.
При выполнении бизнес-действия (например: создание заказа) соответствующее событие (OrderCreated) сохраняется в таблице Outbox в той же транзакции, что и состояние домена. Фоновый процесс считывает таблицу Outbox и публикует события в системы обмена сообщениями (RabbitMQ, Kafka и др.).
Преимущества Outbox:
- Атомарность → база данных и опубликованные события остаются синхронизированными.
- Надежность → ни одно событие не теряется, даже в случае сбоя.
- Масштабируемость → несколько потребителей могут обрабатывать события.
Эта модель обеспечивает безопасную и устойчивую интеграцию в распределенных архитектурах.
Благодаря этим дополнительным возможностям Lino предоставляет надежную безопасность, точный контроль доступа и надежную асинхронную обработку, удовлетворяя критические требования современных приложений в продакшене.
Добавление функций фоновых задач в проекты Lino
Асинхронная обработка необходима для задач, которые не должны блокировать основной поток запросов, например, отправка уведомлений, генерация отчетов или публикация событий.
Lino позволяет включить поддержку фоновых задач (через библиотеки) одной командой:
lino features background-job add
CLI запросит следующие параметры конфигурации:
- Сервис – сервис, в который будет добавлена функция фоновых задач.
- Библиотека – выбранная библиотека для выполнения и планирования задач.
- Интервал проверки и обработки - интервал, с которым очередь проверяется на новые сообщения Outbox.
- Количество записей - максимальное количество записей, обрабатываемых за цикл, контролируя параллелизм и потребление ресурсов.
Эти параметры позволяют настроить систему масштабируемо и устойчиво, обеспечивая надежное выполнение фоновых задач.
