В экосистеме Laravel появился пакет для управления лицензиями приложений. Он ориентирован на сценарии с активацией, ограничением использования и офлайн-проверкой.
Пакет поддерживает привязку лицензий к различным моделям, контроль количества пользователей или устройств, а также криптографическую проверку через подписанные токены.
Установка и настройка
Пакет устанавливается через Composer:
composer require masterix21/laravel-licensingПосле установки публикуются конфигурация и миграции:
php artisan vendor:publish --provider="LucaLongo\Licensing\LicensingServiceProvider"Затем выполняются миграции базы данных:
php artisan migrateДля работы с криптографией необходимо сгенерировать корневой ключ:
php artisan licensing:keys:make-rootКлючи шифруются с использованием passphrase, которая задается через переменную окружения LICENSING_KEY_PASSPHRASE.
Активация лицензии и регистрация устройства
После создания лицензии её можно активировать и привязать к устройству:
$license->activate();Регистрация устройства выполняется через фасад:
use LucaLongo\Licensing\Facades\Licensing;
$usage = Licensing::register(
$license,
'device-fingerprint-hash',
['device_name' => 'MacBook Pro']
);Выпуск офлайн-токена
Пакет позволяет генерировать токены для офлайн-проверки лицензии:
$token = Licensing::issueToken($license, $usage, [
'ttl_days' => 7,
]);Токен содержит подпись и может использоваться без обращения к серверу.
Проверка лицензии
Для проверки доступности лицензии используются методы модели:
if ($license->isUsable()) {
$remainingDays = $license->daysUntilExpiration();
$availableSeats = $license->getAvailableSeats();
}Это позволяет контролировать срок действия и количество доступных мест.
Работа с лицензионными ключами
Пакет предоставляет методы для управления ключами лицензий:
// Получение оригинального ключа
$originalKey = $license->retrieveKey();
// Проверка возможности получения ключа
if ($license->canRetrieveKey()) {
$key = $license->retrieveKey();
}
// Генерация нового ключа
if ($license->canRegenerateKey()) {
$newKey = $license->regenerateKey();
}
// Проверка ключа
$isValid = $license->verifyKey($providedKey);
// Поиск лицензии по ключу
$license = License::findByKey($licenseKey);Поддерживается отзыв и перевыпуск ключей, при этом старые ключи становятся недействительными.
Возможности пакета
Пакет поддерживает офлайн-валидацию через подписанные токены, ограничение количества устройств или пользователей, а также гибкую конфигурацию через контракты и конфиги.
Архитектура позволяет использовать лицензирование для разных типов продуктов внутри одного приложения.