Управление ролями и возможностями пользователей — одна из важнейших задач при организации любого сайта на WordPress. Часто стандартных ролей, таких как «Подписчик», «Автор» или «Редактор», оказывается недостаточно, и требуется гибко настраивать права доступа под конкретные задачи проекта.
Почему важно настраивать роли пользователей в WordPress
По умолчанию WordPress предлагает набор ролей с предопределенными возможностями, что упрощает базовое администрирование. Однако в реальных проектах часто требуется:
- Добавить новую роль с индивидуальными возможностями.
- Изменить права существующих ролей, например, ограничить или расширить доступ к определенным разделам админки.
- Ограничить доступ к некоторым типам записей или настройкам без установки тяжелых плагинов.
Без правильной настройки ролей можно случайно предоставить пользователям слишком много прав, что повысит риск безопасности, или наоборот — ограничить их возможности и усложнить работу.
Основные функции WordPress для работы с ролями и возможностями
WordPress предоставляет удобный API для управления ролями и правами. Вот ключевые функции, которые пригодятся:
add_role($role, $display_name, $capabilities)— добавляет новую роль с набором возможностей.remove_role($role)— удаляет роль.get_role($role)— возвращает объект роли, с помощью которого можно добавлять или удалять возможности.add_cap($cap)иremove_cap($cap)— методы объекта роли, добавляют и удаляют отдельные возможности.
Для примера создадим роль «wpscan_custom_editor» с возможностями редактора, но без права публиковать записи:
function wpscan_add_custom_editor_role() {
$caps = get_role('editor')->capabilities;
unset($caps['publish_posts']);
add_role('wpscan_custom_editor', 'Пользователь-редактор без публикации', $caps);
}
register_activation_hook(__FILE__, 'wpscan_add_custom_editor_role');Эта функция копирует все возможности редактора, но убирает право публиковать записи. Роль добавится при активации плагина.
Изменение прав существующих ролей: пример отключения доступа к плагинам для редакторов
Иногда нужно запретить редакторам доступ к разделу «Плагины», чтобы они не могли случайно активировать или удалять плагины. Для этого можно удалить соответствующую возможность:
function wpscan_remove_plugin_menu_for_editors() {
$role = get_role('editor');
if ($role) {
$role->remove_cap('activate_plugins');
$role->remove_cap('install_plugins');
$role->remove_cap('delete_plugins');
}
}
add_action('admin_init', 'wpscan_remove_plugin_menu_for_editors');После этого редакторы не увидят меню плагинов и не смогут управлять ими.
Плагин для удобного управления ролями и возможностями — User Role Editor
Если вы не хотите писать код, есть отличный бесплатный плагин User Role Editor. Он позволяет в удобном интерфейсе:
- Создавать новые роли.
- Редактировать возможности существующих.
- Применять права к конкретным пользователям.
Плагин часто обновляется и совместим с последними версиями WordPress и WooCommerce.
Пример: ограничение доступа к пользовательскому типу записи для определенной роли
Предположим, у вас есть пользовательский тип записи portfolio, и вы хотите, чтобы только роль «wpscan_portfolio_manager» могла создавать и редактировать такие записи. Для этого при регистрации типа записей в массиве capabilities указывают кастомные права, а затем добавляют их роли:
function wpscan_register_portfolio_cpt() {
$labels = array(
'name' => 'Портфолио',
'singular_name' => 'Портфолио',
);
$capabilities = array(
'edit_post' => 'edit_portfolio',
'read_post' => 'read_portfolio',
'delete_post' => 'delete_portfolio',
'edit_posts' => 'edit_portfolios',
'edit_others_posts' => 'edit_others_portfolios',
'publish_posts' => 'publish_portfolios',
'read_private_posts' => 'read_private_portfolios',
);
register_post_type('portfolio', array(
'labels' => $labels,
'public' => true,
'capability_type' => array('portfolio','portfolios'),
'capabilities' => $capabilities,
'map_meta_cap' => true,
));
}
add_action('init', 'wpscan_register_portfolio_cpt');
function wpscan_add_portfolio_caps() {
$role = get_role('wpscan_portfolio_manager');
if (!$role) {
$role = add_role('wpscan_portfolio_manager', 'Менеджер портфолио', array());
}
$caps = array(
'edit_portfolio', 'read_portfolio', 'delete_portfolio',
'edit_portfolios', 'edit_others_portfolios', 'publish_portfolios', 'read_private_portfolios'
);
foreach ($caps as $cap) {
$role->add_cap($cap);
}
}
add_action('init', 'wpscan_add_portfolio_caps', 20);Таким образом, только пользователи с ролью «wpscan_portfolio_manager» смогут работать с типом записи «portfolio».
Советы по безопасности при работе с ролями и возможностями
При настройке ролей стоит помнить:
- Не давайте права администратора пользователям, которым нельзя доверять.
- Регулярно проверяйте права ролей, особенно после установки новых плагинов, которые могут добавлять свои возможности.
- Используйте плагин Clearfy Pro для дополнительной защиты и оптимизации прав доступа на сайте (подробнее на WPSHOP).
Заключение
Гибкое управление ролями и возможностями в WordPress позволяет создавать удобные и безопасные сайты, адаптированные под любые требования. Используя встроенные функции и проверенные плагины, вы сможете без труда настраивать права доступа, повышая безопасность и удобство работы с сайтом.