Перенаправить пользователя с бэкенда на фронтенд

Вопрос или проблема

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

Я пытался использовать что-то вроде:

function redirect_non_admin_user(){
    if ( is_user_logged_in() && !current_user_can( 'administrator' ) ) {
        wp_redirect( site_url() );
        exit;
    }
}
add_action( 'admin_init', 'redirect_non_admin_user' );

Проблема с приведенным выше кодом в том, что пользователь теперь даже не может оставить комментарий (я думаю, потому что отправка комментариев вызывает POST-запрос в админ-область, и это затем перенаправляется на фронтенд).

Какое будет хорошее решение для этого? Позволить пользователю комментировать, но не получать доступ к админ-области. Спасибо!

Следующий код работает для меня, попробуйте:

function no_dashboard() {
    $user = wp_get_current_user();
    if (in_array('subscriber', (array)$user->roles)) {
        wp_redirect(site_url());
        exit;
    }
}
add_action('admin_init', 'no_dashboard');

Добавьте это в function.php

function custom_blockusers_init() {
  if ( is_user_logged_in() && is_admin() && !current_user_can( 'administrator' ) ) {
    wp_redirect( home_url() );
    exit;
  }
}
add_action( 'init', 'custom_blockusers_init' ); // Подключение к 'init'

Я провел дополнительные тесты, и непрямое перенаправление, если есть $_POST['action'], решает проблему:

function redirect_non_admin_user(){
    $action = $_POST['action'];
    if ( is_user_logged_in() && !current_user_can( 'administrator' ) && empty($action) ) {
        wp_redirect( site_url() );
        exit;
    }
}
add_action( 'admin_init', 'redirect_non_admin_user' );

Ответ или решение

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

1. Основная идея

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

2. Использование admin_init

Код, приведенный в вашем вопросе, показывает основной подход. Функция wp_redirect() служит для перенаправления пользователей, которые не являются администраторами.

function redirect_non_admin_user() {
    if (is_user_logged_in() && !current_user_can('administrator')) {
        wp_redirect(site_url());
        exit;
    }
}
add_action('admin_init', 'redirect_non_admin_user');

Проблема

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

3. Варианты решения

3.1. Исключение действий

Чтобы избежать проблемы с комментариями, можно дополнить логику, чтобы пропускать перенаправление при наличии определенных POST-запросов:

function redirect_non_admin_user() {
    if (is_user_logged_in() && !current_user_can('administrator') && empty($_POST['action'])) {
        wp_redirect(site_url());
        exit;
    }
}
add_action('admin_init', 'redirect_non_admin_user');

При этом мы проверяем значение $_POST['action'], и если оно не пустое, мы не выполняем перенаправление.

3.2. Более точечные проверки пользователей

Другой способ – это использование ролей пользователей для более точного контроля доступа. Например, можно сделать так, чтобы только пользователи с определенной ролью имели доступ к административному интерфейсу:

function no_dashboard() {
    $user = wp_get_current_user();
    if (in_array('subscriber', (array) $user->roles)) {
        wp_redirect(site_url());
        exit;
    }
}
add_action('admin_init', 'no_dashboard');

4. Рекомендации по реализации

  1. Тестирование на разных ролях: Убедитесь, что функции работают корректно для пользователей с различными ролями (подписчики, авторы и администраторы).

  2. Обработка ошибок: Добавьте механизмы логирования, чтобы отслеживать попытки доступа к административной части сайта. Это поможет в обнаружении потенциальных угроз.

  3. Безопасность данных: Убедитесь, что данные, получаемые от пользователей, валидируются и экранируются, чтобы предотвратить возможные SQL-инъекции и другие уязвимости.

5. Заключение

Таким образом, использование методов проверки ролей и обработки POST-запросов поможет вам эффективно управлять доступом пользователей к административной панели вашего сайта на WordPress. Это обеспечивает защиту от несанкционированного доступа, позволяя при этом пользователям выполнять необходимые действия, такие как оставление комментариев. Внедрение этих решений сделает ваш сайт более безопасным и удобным для пользователей.

Оцените материал
Добавить комментарий

Капча загружается...