Как правильно проверять права доступа в WordPress

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

Почему проверка прав доступа в WordPress важна

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

Чёткая и корректная проверка прав доступа защищает сайт от ошибок, снижает риски безопасности и помогает создавать гибкие решения, адаптированные под разные группы пользователей.

Основные функции WordPress для проверки прав доступа

Для проверки прав доступа в WordPress используются встроенные функции, которые позволяют узнать, обладает ли текущий пользователь определёнными правами.

  • current_user_can( $capability ) — проверяет, имеет ли текущий пользователь указанное право.
  • user_can( $user_id, $capability ) — проверяет права конкретного пользователя по ID.
  • is_user_logged_in() — проверяет, авторизован ли пользователь.
  • wpsbloger_check_user_capability() — пример собственной функции, которую мы создадим для удобства проверки.

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

Проверка прав текущего пользователя через current_user_can

Функция current_user_can — это базовый способ проверить, может ли пользователь выполнять определённое действие. Например, чтобы проверить, может ли пользователь редактировать публикации:

if ( current_user_can( 'edit_posts' ) ) {
    // Пользователь может редактировать записи
}

Список стандартных возможностей (capabilities) можно найти в официальной документации WordPress. Важно помнить, что у ролей могут быть дополнительные кастомные capabilities.

Проверка прав конкретного пользователя через user_can

Если нужно проверить права не текущего пользователя, а другого, используем user_can($user_id, $capability):

$user_id = 42;
if ( user_can( $user_id, 'manage_options' ) ) {
    // Пользователь с ID 42 может управлять настройками
}

Это полезно, например, при создании административных панелей с разными уровнями доступа.

Как создавать собственные проверки прав доступа

Для удобства и повторного использования можно создать собственную функцию проверки прав, например, wpsbloger_check_user_capability(). Она поможет централизовать логику и добавить дополнительные проверки, если потребуется.

function wpsbloger_check_user_capability( $capability, $user_id = null ) {
    if ( ! $user_id ) {
        return current_user_can( $capability );
    }
    return user_can( $user_id, $capability );
}

// Пример использования
if ( wpsbloger_check_user_capability( 'edit_pages' ) ) {
    // Текущий пользователь может редактировать страницы
}

Такой подход упрощает поддержку и расширение проверок.

Примеры практических сценариев с проверкой прав

Ограничение доступа к кастомной админ-странице

Предположим, вы создаёте плагин с собственной административной страницей, доступной только администраторам. В файле плагина при регистрации меню нужно указать capability:

add_action( 'admin_menu', 'wpsbloger_register_custom_page' );
function wpsbloger_register_custom_page() {
    add_menu_page(
        'Моя страница',
        'Моя страница',
        'manage_options', // Только администраторы
        'wpsbloger-custom-page',
        'wpsbloger_render_custom_page'
    );
}

Далее, при выводе страницы дополнительно проверяем права:

function wpsbloger_render_custom_page() {
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( 'У вас нет прав для просмотра этой страницы.' );
    }
    echo '<h1>Добро пожаловать на мою страницу</h1>';
}

Защита AJAX-запросов с помощью проверки прав

Если ваш плагин использует AJAX и требует проверки прав пользователя, обязательно проверяйте capability перед выполнением действий:

add_action( 'wp_ajax_wpsbloger_save_data', 'wpsbloger_save_data_callback' );
function wpsbloger_save_data_callback() {
    if ( ! current_user_can( 'edit_posts' ) ) {
        wp_send_json_error( 'Доступ запрещён' );
        wp_die();
    }
    // Обработка данных
    wp_send_json_success( 'Данные сохранены' );
    wp_die();
}

Добавление проверки при сохранении метаданных

При сохранении пользовательских полей в админке нужно убедиться, что у пользователя есть право редактировать соответствующий пост:

add_action( 'save_post', 'wpsbloger_save_custom_meta' );
function wpsbloger_save_custom_meta( $post_id ) {
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }
    if ( isset( $_POST['wpsbloger_custom_field'] ) ) {
        update_post_meta( $post_id, '_wpsbloger_custom_field', sanitize_text_field( $_POST['wpsbloger_custom_field'] ) );
    }
}

Ошибки и лучшие практики при проверке прав доступа

Частые ошибки:

  • Отсутствие проверок при выполнении критичных действий (например, сохранение настроек или данных).
  • Использование неправильных capability, например, edit_posts вместо manage_options для админских функций.
  • Неверное понимание ролей и capabilities, особенно у кастомных ролей.

Лучшие практики:

  • Проверяйте права доступа на каждом этапе — при показе интерфейса, и при обработке данных.
  • Используйте встроенные функции WordPress current_user_can и user_can.
  • Создавайте собственные функции-обёртки для централизованной проверки.
  • Документируйте, какие capabilities требуются для каждой функции плагина или темы.

Использование плагина Clearfy Pro для упрощения управления ролями и правами

Плагин Clearfy Pro значительно упрощает работу с ролями и правами доступа, позволяя гибко настраивать capabilities без программирования.

С Clearfy Pro вы можете:

  • Редактировать стандартные и пользовательские роли.
  • Добавлять или убирать capabilities.
  • Ограничивать доступ к админским разделам и функциям.

Это особенно полезно, если вы не хотите писать ручные проверки, а предпочитаете визуальный интерфейс для управления правами.

Выводы и рекомендации

Проверка прав доступа — обязательный элемент разработки любых расширений для WordPress. Правильное использование функций current_user_can и user_can помогает избежать серьёзных уязвимостей и ошибок. Создание собственных функций-обёрток делает код чище и удобнее в сопровождении.

Для упрощения управления правами рекомендуем обратить внимание на такие инструменты, как Clearfy Pro, которые помогут быстро настраивать роли и capabilities без кода.

Используйте полученные знания и примеры кода, чтобы создавать безопасные и удобные решения на базе WordPress.

Как создать автоматическое удаление старого контента в WordPress
23.12.2025
Как создать собственный шорткод в WordPress
02.11.2025
Как правильно проверять права доступа в WordPress
04.01.2026
Как создать и использовать REST API эндпоинты в WordPress
26.12.2025
Оптимизация загрузки картинок в WordPress: практические методы
26.11.2025