В WordPress стандартно доступ к административной панели имеют пользователи с ролями Администратор, Редактор и некоторые другие. Однако в некоторых случаях необходимо ограничить доступ к панели управления, предоставив его только определённым пользователям с кастомными правами. В этой статье мы подробно рассмотрим, как создать охранные роли (защитные роли) для ограничения доступа к административной панели, какие плагины помогут в этом и как реализовать это программно с примерами кода.
Почему важно ограничивать доступ к административной панели WordPress
Административная панель WordPress содержит чувствительные настройки сайта, включая управление пользователями, темами, плагинами, контентом и безопасностью. Если доступ к ней получат неподготовленные пользователи или злоумышленники, это может привести к взлому, потере данных или нарушению работы сайта. Особенно это актуально для сайтов с большим количеством контент-менеджеров, фрилансеров и подрядчиков.
Ограничение доступа позволяет:
- Снизить риск случайных или злонамеренных изменений;
- Разграничить обязанности между сотрудниками;
- Упростить интерфейс для пользователей, предоставив им только нужные функции;
- Повысить общую безопасность сайта.
Создание и настройка охранных ролей без плагинов
WordPress из коробки поддерживает набор ролей и прав (capabilities), но их можно расширять и создавать новые. Рассмотрим, как создать роль wpaction_limited_admin с ограниченным доступом к панели.
Шаг 1. Добавление новой роли с минимальными правами
Добавим роль, которая сможет заходить в админ-панель, но не управлять пользователями и плагинами:
function wpaction_add_limited_admin_role() {
add_role('wpaction_limited_admin', 'Охранная роль', array(
'read' => true, // может заходить в админку
'edit_posts' => true, // может редактировать записи
'upload_files' => true, // может загружать медиа
'edit_pages' => true,
'edit_others_posts' => false,
'manage_options' => false, // не может менять настройки
'activate_plugins' => false,
'edit_theme_options' => false
));
}
register_activation_hook(__FILE__, 'wpaction_add_limited_admin_role');Этот код создаст роль с базовыми возможностями, но без доступа к ключевым административным функциям.
Шаг 2. Ограничение доступа к административным страницам
Даже если пользователь вошёл в админку, некоторые страницы должны быть для него недоступны. Для этого используем хук admin_init:
function wpaction_restrict_admin_pages() {
if (current_user_can('wpaction_limited_admin')) {
global $pagenow;
$restricted = array('plugins.php', 'users.php', 'tools.php', 'options-general.php');
if (in_array($pagenow, $restricted)) {
wp_redirect(admin_url());
exit;
}
}
}
add_action('admin_init', 'wpaction_restrict_admin_pages');Этот код перенаправит пользователя с ролью wpaction_limited_admin на главную страницу панели, если он попытается зайти на запрещённые страницы.
Использование плагинов для создания охранных ролей и ограничения доступа
Если вы предпочитаете не писать код, для решения задачи подойдут готовые плагины:
- User Role Editor — позволяет создавать и изменять роли и права в интерфейсе, включая ограничение доступа к админ-страницам.
- Adminimize — скрывает ненужные элементы меню и панелей для определённых ролей, упрощая интерфейс.
- Members — мощный инструмент для управления ролями и правами с возможностью создания кастомных ролей.
Пример настройки с User Role Editor:
- Установите и активируйте плагин User Role Editor.
- Перейдите в меню Пользователи > User Role Editor.
- Создайте новую роль (например, "Охранная роль") и задайте ей необходимые права, убрав доступ к настройкам и другим важным разделам.
- Назначьте эту роль нужным пользователям.
Пример комплексного ограничения доступа с помощью плагина и кастомного кода
Иногда нужно не только ограничить меню, но и контролировать доступ к REST API и AJAX-эндпоинтам. Рассмотрим пример, как вместе с User Role Editor дополнительно защитить REST API.
function wpaction_restrict_rest_api_access($access) {
if (!is_user_logged_in()) {
return new WP_Error('rest_forbidden', 'Доступ запрещён', array('status' => 401));
}
$user = wp_get_current_user();
if (in_array('wpaction_limited_admin', $user->roles)) {
// Можно добавить дополнительные проверки по маршрутам
// Например, запретить некоторые endpoint
$route = $_SERVER['REQUEST_URI'];
if (strpos($route, '/wp/v2/users') !== false) {
return new WP_Error('rest_forbidden', 'Доступ к пользователям запрещён', array('status' => 403));
}
}
return $access;
}
add_filter('rest_authentication_errors', 'wpaction_restrict_rest_api_access');Этот код не позволит пользователям с ролью wpaction_limited_admin получать данные пользователей через REST API, повышая безопасность.
Рекомендации по тестированию и безопасности
После настройки ролей и прав обязательно протестируйте новую роль:
- Создайте тестового пользователя с новой ролью.
- Проверьте доступ к административной панели и страницам.
- Убедитесь, что REST API и AJAX-запросы работают корректно для этой роли.
Также регулярно обновляйте WordPress и используемые плагины, чтобы избежать уязвимостей.
Для удобной работы с ролями и ограничениями можно рассмотреть плагин Clearfy Pro от WPSHOP, который содержит дополнительные возможности по оптимизации и безопасности.