Как добавить ограничение на количество активаций лицензии WordPress плагинов по ролям пользователей

В системах лицензирования WordPress плагинов часто требуется не просто ограничить общее количество активаций лицензии, но и сделать это с учётом ролей пользователей сайта. Например, администраторы могут иметь больше активных лицензий, чем редакторы или подписчики. В этой статье мы разберём, как реализовать подобное ограничение с помощью собственного кода и рассмотрим практические примеры.

Почему важно учитывать роли пользователей при ограничении активаций

В большинстве случаев лицензия ограничивается фиксированным числом активаций — например, 3 активации на лицензию. Но такой подход не всегда удобен, если плагин используется на мультисайтах или в командах с разной ответственностью. Например, администраторы могут управлять разными проектами и им нужно больше активаций, а редакторы или обычные пользователи — меньше.

Учитывая роли, можно:

  • Гибко управлять лицензиями в больших командах.
  • Снизить риск превышения допустимого числа активаций.
  • Автоматизировать контроль и отчётность по лицензиям.

Такой подход повышает удобство и безопасность использования плагинов.

Как реализовать ограничение активаций по ролям — общая схема

Для реализации нам потребуется:

  1. Определить роли, для которых будут разные лимиты активаций.
  2. При попытке активации лицензии проверять роль пользователя и текущее число активных активаций для этой роли.
  3. Если лимит превышен — блокировать активацию с сообщением.
  4. Обеспечить хранение статистики активаций по ролям на лицензионном сервере или в базе данных.

В реальном проекте это можно реализовать через расширение лицензионного API, добавление новых параметров и проверок.

Пример структуры данных для хранения лимитов

В базе данных или в конфигурации лицензионного сервера можно хранить массив с ограничениями:

$wplicense_role_limits = array(<br>    'administrator' => 5,<br>    'editor' => 3,<br>    'author' => 2,<br>    'subscriber' => 1,<br>);

Это значит, что администратор может активировать лицензию на 5 сайтов, редактор — на 3 и так далее.

Код для проверки и блокировки активации по ролям

Ниже пример функции с префиксом wplicense_, которая проверяет возможность активации лицензии с учётом роли текущего пользователя. Предполагаем, что у вас есть функция получения текущих активаций по роли wplicense_get_active_activations_by_role().

function wplicense_can_activate_license_by_role( $user_id, $license_key ) {<br>    // Массив ограничений по ролям<br>    $role_limits = array(<br>        'administrator' => 5,<br>        'editor' => 3,<br>        'author' => 2,<br>        'subscriber' => 1,<br>    );<br><br>    $user = get_userdata( $user_id );<br>    if ( ! $user ) {<br>        return new WP_Error( 'invalid_user', 'Пользователь не найден' );<br>    }<br><br>    // Определяем роль пользователя, берем первую из массива ролей<br>    $roles = $user->roles;<br>    if ( empty( $roles ) ) {<br>        return new WP_Error( 'no_role', 'У пользователя нет роли' );<br>    }<br>    $role = $roles[0];<br><br>    // Проверяем наличие лимита для роли<br>    if ( ! isset( $role_limits[ $role ] ) ) {<br>        return new WP_Error( 'role_not_allowed', 'Роль пользователя не имеет доступа к активации лицензии' );<br>    }<br><br>    $max_activations = $role_limits[ $role ];<br>    $current_activations = wplicense_get_active_activations_by_role( $license_key, $role );<br><br>    if ( $current_activations >= $max_activations ) {<br>        return new WP_Error( 'limit_exceeded', 'Достигнуто максимальное количество активаций для роли ' . $role );<br>    }<br><br>    return true;<br>}

Эта функция возвращает true, если активация возможна, или WP_Error с описанием ошибки в противном случае.

Пример функции подсчёта активных активаций по роли

В реальной системе нужно реализовать хранение данных активаций. Ниже упрощённый пример, где данные берутся из базы данных wp_activations с полем user_role:

function wplicense_get_active_activations_by_role( $license_key, $role ) {<br>    global $wpdb;<br>    $table = $wpdb->prefix . 'activations';<br>    $count = $wpdb->get_var( $wpdb->prepare(<br>        "SELECT COUNT(*) FROM $table WHERE license_key = %s AND user_role = %s",<br>        $license_key,<br>        $role<br>    ));<br>    return (int) $count;<br>}

В системе лицензирования необходимо при каждой активации сохранять роль пользователя.

Как интегрировать ограничение в процесс активации лицензии

Чтобы использовать проверку с ролями, добавьте вызов wplicense_can_activate_license_by_role() в точку входа активации лицензии на вашем лицензионном сервере или в коде плагина, который отвечает за валидацию ключа.

Пример упрощённой логики:

function wplicense_handle_license_activation( $user_id, $license_key ) {<br>    $check = wplicense_can_activate_license_by_role( $user_id, $license_key );<br>    if ( is_wp_error( $check ) ) {<br>        return $check; // Возвращаем ошибку активации<br>    }<br>    // Продолжаем активацию<br>    // Сохраняем активацию с учётом роли пользователя<br>    wplicense_save_activation( $user_id, $license_key );<br>    return true;<br>}

Такой подход позволяет гибко контролировать активации и учитывать роли пользователей.

Практические советы и рекомендации

Хранение данных активаций

Для хранения информации об активациях создайте отдельную таблицу в базе данных с полями:

  • ID
  • license_key
  • user_id
  • user_role
  • activation_date
  • site_url (если нужно)

Это позволит быстро и эффективно фильтровать активации по ролям и лицензиям.

Обработка смены роли пользователя

Если роль пользователя изменится, подумайте, как это повлияет на лимиты. Можно при смене роли автоматически пересчитывать количество активаций или запрещать новые, если лимит превышен.

Интеграция с WPShop

Если вы используете плагин WP Licensing от WPShop, то настройка таких ограничений возможна через расширение API и фильтры. В документации WPShop есть примеры, как добавить кастомные проверки лицензий.

Заключение

Ограничение количества активаций лицензии WordPress плагинов с учётом ролей пользователей — эффективный способ гибко управлять лицензиями в командах разного уровня доступа. В статье приведены конкретные примеры кода и рекомендации по реализации. Используйте их, чтобы повысить контроль над лицензиями и адаптировать систему под нужды вашего проекта.

Как удалить все посты из WordPress с помощью кода
28.11.2025
Как отменить активацию лицензии WordPress плагина без ошибок
26.12.2025
Как установить ограничение на лицензию WordPress плагина по геолокации
20.04.2026
Как защитить лицензии WordPress плагинов от пиратского использования
26.01.2026
Как создать уникальный лицензионный ключ для WordPress плагина
01.11.2025