Laravel Licensing: управление лицензиями в Laravel

В экосистеме 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);

Поддерживается отзыв и перевыпуск ключей, при этом старые ключи становятся недействительными.

Возможности пакета

Пакет поддерживает офлайн-валидацию через подписанные токены, ограничение количества устройств или пользователей, а также гибкую конфигурацию через контракты и конфиги.

Архитектура позволяет использовать лицензирование для разных типов продуктов внутри одного приложения.

Похожие статьи

Рекомендательные технологии Подробнее
Разработка и инструменты 6 месяцев назад

Простой способ работать с конкурентностью и параллелизмом в Python

Объяснение, как с помощью стандартных средств Python (concurrent.futures) легко решать задачи конкурентности и параллелизма. Приведены практические примеры использования пулов потоков и процессов.

Как обнаруживать и устранять race condition в приложениях Laravel

Race condition - распространённая проблема в веб-приложениях с параллельными запросами. В статье разбирается, как обнаружить такие ошибки в Laravel и какие механизмы помогают их устранить.

Разработка и инструменты 5 месяцев назад

Наследование моделей в Laravel с помощью Parental

Разбор пакета Parental для Laravel, который реализует single table inheritance (STI) в Eloquent, т.е наследование моделей в одной таблице. Статья объясняет, зачем это нужно, как настроить Parental, управлять типами моделей и работать с дочерними связями.