Роли и права пользователей

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

У каждой роли есть свой набор прав, о которых мы поговорим чуть ниже, к примеру «Администраторы» — это группа пользователей, а switch_themes (возможность смены темы оформления) уже относится к правам этой группы.

И конечно не могу не порекомендовать свой видеокурс по созданию темы WordPress с нуля на основе готовой HTML-вёрстки, который поможет классно прокачать ваши навыки в WP.

Роли пользователей

В WordPress по умолчанию уже существует 6 групп (ролей) пользователей:

  • Super Admin — суперадминистратор, который имеет право управлять сетью сайтов.
  • Administrator — администратор.
  • Editor — редактор, может публиковать и редактировать посты других пользователей.
  • Author — автор, может публиковать и редактировать собственные посты.
  • Contributor — участник, может писать и отправлять свои посты на модерацию.
  • Subscriber — подписчик, всё, что он может — это редактировать свой профиль.

А если у вас стоит плагин для интернет-магазинов WooCommerce, то у вас будет ещё две дополнительные роли, о них я рассказываю в отдельном уроке.

Сразу после установки WordPress автоматически создается пользователь-администратор.

Также вы можете установить, какую роль нужно присваивать только что зарегистрированному пользователю. Это настраивается в «Настройки > Общие».

настройка роли нового пользователя

Изменить роль пользователя можно на странице его профиля или же на странице со всеми пользователями:

Меняем роль пользователя в админке сайта

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

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

Администратор (administrator)

Вот так выглядит админка администраторов (рекомендую обратить внимание именно на меню слева).

админка администраторов в WordPress

Если мы не говорим о сети сайтов WordPress Мультисайт, то администраторы могут всё – устанавливать плагины и темы, редактировать весь контент и настройки, создавать и удалять пользователей, сбрасывать пароли и так далее. Полный список их прав в таблице ниже.

Редактор (editor)

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

Админка редакторов в WordPress

Автор (author)

Авторы могут публиковать и редактировать только свои собственные посты типа «Записи». И удалять кстати тоже. То есть у них уже нет доступа к Страницам. И не могут создавать новые рубрики и метки.

админка авторов WordPress

Участник (contributor)

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

Адмнка участников WordPress

Подписчик (subscriber)

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

админка у подписчика WordPress

Супер-администратор

Вы наверное подумали: «Так, а где роль суперадмина?» Почему я не рассказал про неё в самом начале? А это даже и не совсем роль – это роль администратора с возможностью управления сетью WordPress Мультисайт.

У него появляется доступ в отдельную консоль для мультисайта.

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

Таблица ролей и прав пользователей

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

ПраваСуперадминАдминРедакторАвторУчастникПодписчик
install_pluginsДаДа   
update_pluginsДаДа   
activate_pluginsДаДа   
edit_pluginsДаДа   
delete_pluginsДаДа   
install_themesДаДа   
switch_themesДаДа   
edit_themesДаДа   
edit_theme_optionsДаДа   
update_themesДаДа   
delete_themesДаДа   
update_coreДаДа   
import / exportДаДа   
manage_optionsДаДа   
edit_dashboardДаДа   
create_usersДаДа   
edit_usersДаДа   
delete_usersДаДа   
list_usersДаДа   
promote_usersДаДа   
remove_usersДаДа   
moderate_commentsДаДаДа  
manage_categories ДаДаДа  
edit_pagesДаДаДа  
edit_others_pagesДаДаДа  
edit_published_pagesДаДаДа  
publish_pagesДаДаДа  
delete_pagesДаДаДа  
delete_others_pagesДаДаДа  
delete_published_pagesДаДаДа  
delete_private_pagesДаДаДа  
edit_private_pagesДаДаДа  
read_private_pagesДаДаДа  
edit_others_postsДаДаДа  
delete_others_posts ДаДаДа  
delete_private_postsДаДаДа  
edit_private_postsДаДаДа  
read_private_postsДаДаДа  
edit_published_postsДаДаДаДа 
publish_postsДаДаДаДа 
delete_published_postsДаДаДаДа 
edit_postsДаДаДаДаДа
delete_postsДаДаДаДаДа
unfiltered_htmlДаДаДа  
upload_filesДаДаДаДа 
readДаДаДаДаДаДа
manage_networkДа
manage_sitesДа
manage_network_usersДа
manage_network_themesДа
manage_network_optionsДа
upgrade_networkДа
setup_networkДа

Также напоминаю про свой видеокурс по натяжке готовой вёрстки на WordPress.

Примитивные и Мета-права

Сейчас пришло время рассказать вам о важном моменте, связанном с правами пользователя. Я также упоминал о нём, когда описывал функцию register_post_type().

Чтобы понять, как это работает, лучше всего обратиться к примеру.

Предположим, что у нас есть какое-то право, допустим это edit_posts. И мы например можем проверить функцией current_user_can(), может ли текущий пользователь в принципе редактировать посты или нет. Это примитивное право, под него попадают все возможные посты. Это можно проверить:

if( current_user_can( 'edit_posts' ) ) {
 
}

Но как вы знаете, у нас есть например роль Авторы, которые могут редактировать только свои посты. Как проверить, что они это могут делать? При помощи мета-права!

if( current_user_can( 'edit_post', $post->ID ) ) {
 
}

Мета-права создаются «на лету» динамически, например алгоритм такой, что WordPress чекает, может ли пользователь редактировать чужие посты примитивным правом edit_others_posts, если нет, то он проверяет, является ли пользователь автором проверяемого поста $post->ID. И вот так это и работает.

Права пользователей

switch_themes

  • С версии 2.0
  • Даёт доступ к странице админки Внешний вид > Темы, и возможность переключать их.

edit_themes

  • С версии 2.0
  • Даёт доступ к странице Внешний вид > Редактор, где можно изменять исходный код файлов тем.

edit_theme_options

install_themes

  • С версии 2.8
  • Возможность устанавливать новые темы.

delete_themes

  • С версии 3.0
  • Возможность удалять темы.

update_themes

  • С версии 2.7
  • Позволяет обновлять темы WordPress сайта через админку.

activate_plugins

  • С версии 3.0
  • Доступ к странице в админке Плагины и возможность активировать их.

edit_plugins

  • С версии 2.0
  • Возможность редактировать исходный код плагинов в Плагины > Редактор.

install_plugins

  • С версии 2.7
  • Позволяет добавлять новые плагины в Плагины > Добавить новый.

edit_users

  • С версии 2.0
  • Даёт доступ ко странице Пользователи и позволяет изменять их информацию.

manage_options

  • С версии 2.0
  • Даёт возможность изменять настройки сайта: Общие, Чтение, Написание и т д.

moderate_comments

  • С версии 2.0
  • Позволяет модерировать комментарии на экране Комментарии в админке, для доступа к которой также понадобится право edit_posts.

manage_categories

  • С версии 2.0
  • Даёт возможность добавлять и редактировать рубрики в Записи > Рубрики.
  • С версии 2.0
  • Возможнось добавлять и редактировать Ссылки в WordPress, который в последних версиях кстати отключены по умолчанию.

upload_files

  • С версии 2.0
  • Доступ к экранам Медиафайлы и Медиафайлы > Добавить новый, кроме того, даёт также и возможность загружать медиафайлы из постов.

import

  • С версии 2.0
  • Доступ к Инструменты > Экспорт и Инструменты > Импорт.

export

  • С версии 3.0
  • Возможность осуществлять экспорт контента Инструменты > Экспорт.

unfiltered_html

  • С версии 2.0
  • Позволяет пользователю публиковать любые HTML-теги (в том числе и <script>) в контенте записей, страниц, комментариев и виджетов.
  • Будьте осторожны, чтобы это право не попало в плохие или неумелые руки!
  • Внутри сети WordPress Мультисайт только у супер-админов есть право unfiltered_html.

А вообще кстати мы можем изменять список разрешённых HTML-тегов в постах и комментариях.

edit_posts

  • С версии 2.0
  • Добавляет доступ к страницам Записи, Записи > Добавить новую, Комментарии и Комментарии > Ожидающие модерации.

edit_others_posts

  • С версии 2.0
  • Возможность редактировать и удалять любой комментарий.
  • Возможность редактировать записи (черновики) других пользователей.

edit_published_posts

  • С версии 2.0
  • Пользователи смогут редактировать свои собственные опубликованные записи.
  • Для редактирования опубликованной записи других пользователей, понадобится также право edit_others_posts.
  • Также обратите внимание, что вы и вовсе не сможете получить доступа к экрану «Записи», если у вас нет права edit_posts.

publish_posts

  • С версии 2.0
  • Возможность публиковать свои посты (типа записи), иначе вы сможете только сохранять их как черновики.

delete_posts

  • С версии 2.1
  • Возможность удалять свои собственные записи.

delete_others_posts

  • С версии 2.1
  • Возможность удалять записи, созданные другими пользователями.

delete_published_posts

  • С версии 2.1
  • Возможность удалять опубликованные записи.

delete_private_posts

  • С версии 2.1
  • Возможность удалять записи, отмеченные как «Личное».

edit_private_posts

  • С версии 2.1
  • Возможность редактировать записи, отмеченные как «Личное».

read_private_posts

  • С версии 2.1
  • Возможность читать записи, отмеченные как «Личное».

edit_pages

  • С Версии 2.0
  • Даёт доступ к следующим экранам в админке Страницы и Страницы > Добавить новую.

publish_pages

  • С версии 2.1
  • Возможность публиковать тип записей страницы.

edit_others_pages

  • С версии 2.1
  • Возможность редактировать страницы, созданные другими пользователями.

edit_published_pages

  • С версии 2.1
  • Взможность редактировать уже опубликованные страницы.

delete_pages

  • С версии 2.1
  • Возможность удалять свои собственные страницы.

delete_others_pages

  • С версии 2.1
  • Возможность удалять страницы, созданные другими пользователями.

delete_published_pages

  • С версии 2.1
  • Возможность удалять опубликованные страницы.

edit_private_pages

  • С версии 2.1
  • Возможность редактировать страницы, отмеченные как «Личное».

read_private_pages

  • С версии 2.1
  • Возможность просматривать страницы, отмеченные, как «Личное».

delete_private_pages

  • С версии 2.1
  • Возможность удалять страницы, отмеченные как «Личное».

delete_users

  • С версии 2.1
  • Право удалять пользователей.

create_users

  • С версии 2.1
  • Позволяет создавать пользователей, однако без права promote_users у создаваемых пользователей всегда будет стандартная роль, указанная в Настройки > Общие.

list_users

  • С версии 3.0
  • Даёт доступ к странице админки «Пользователи»

remove_users

  • С версии 3.0
  • Даёт возможность удалять пользователей.

promote_users

  • С версии 3.0
  • Включает функцию «Изменить роль на…» в списке пользователей в админке, но обратите внимание, что для доступа к нему понадобится также право edit_users.
  • Также в мультисайт-установке добавляет функцию «Добавить существующего пользователя»

unfiltered_upload

С версии 2.3.

Право unfiltered_upload очень похоже на unfiltered_html. Если у пользователя присутствует это право, он(а) сможет загружать файлы, которые НЕ находятся в белом списке WordPress:

  • Изображения: jpg, jpeg, png, gif, ico
  • Документы: pdf, doc, docx, ppt, pptx, pps, ppsx, odt, xls, xlsx, psd
  • Аудио: mp3, m4a, ogg, wav
  • Видео: mp4, m4v, mov, wmv, avi, mpg, ogv, 3gp, 3g2

В итоге, если у пользователя нет данного разрешения, то попытки загрузить любые файлы, который не находятся в этом списке, приведут к ошибке «Извините, этот тип файла недопустим по соображениям безопасности»:

Файл загрузить не удалось

По умолчанию этого права нет ни у кого, но его можно включить, добавив в wp-config.php следующую строчку:

define( 'ALLOW_UNFILTERED_UPLOADS', true );

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

edit_dashboard

  • С версии 2.5
  • Даэт возможность настраивать метабоксы в Консоли WordPress.

customize

  • С версии 4.0
  • Даёт доступ к кастомайзеру. 

delete_site

  • С версии 4.0
  • Позволяет пользователю удалить текущий сайт (для сети WordPress Мультисайт).

update_plugins

  • С версии 2.6
  • Позволяет устанавливать обновления на плагины.

delete_plugins

  • С версии 2.6
  • Позволяет удалять плагины.

update_core

  • С версии 3.0
  • Даёт право на обновление ядра WordPress

edit_comment

  • С версии 3.1

create_sites

delete_sites

manage_network

  • С версии 3.0
  • Даёт доступ в консоль управления сетью WordPress Мультисайт.
  • Даёт пользователям возможность обновить сеть.

manage_sites 

  • С версии 3.0
  • Даёт возможность добавлять, редактировать, удалять, архивировать, разархивировать, активировать, деактивировать и помечать как спам любой сайт сети мультисайт.

manage_network_users

  • С версии 3.0
  • Даёт возможность управлять пользователями сети WordPress Мультисайт.

manage_network_themes

  • С версии 3.0
  • Даёт возможность управлять темами сети WordPress Мультисайт.

manage_network_options

  • С версии 3.0
  • Даёт доступ к странице настроек сети WordPress Мультисайт.

manage_network_plugins

  • С версии 3.0
  • Даёт возможность управлять плагинами сети WordPress Мультисайт.

upload_plugins

  • С версии 4.0
  • Разрешает пользователю загружать плагины в виде zip-архива в меню Плагины > Добавить новый сети мультисайт

upload_themes

  • С версии 4.0
  • Разрешает пользователю загружать плагины в виде zip-архива в меню Темы > Добавить новую сети мультисайт

upgrade_network

  • С версии 4.8
  • Даёт доступ к пункту меню Консоль > Обновить сеть в установке WordPress Мультисайт.

setup_network

  • С версии 4.8
  • Возможность установки сети WordPress Мультисайт.

read

  • С версии 2.0
  • Доступ к следующим экранам админки – Консоль и Ваш профиль.

Примеры работы с ролями и правами пользователей

Проверка роли или права пользователя

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

  • user_can() – проверяет пользователя, ID которого передан в параметрах.
  • current_user_can() – проверяет текущего пользователя.

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

if( current_user_can( 'administrator' ) ) {
	// выполняем какие-либо действия
}

Или:

if( user_can( get_current_user_id(), 'administrator' ) ) {
	// выполняем какие-либо действия
}

Таким же образом вместо названия роли пользователя мы можем передать и название определённого права. Например проверим, что пользователь может переключать темы:

if( current_user_can( 'switch_themes' ) ) {
	// выполняем какие-либо действия
}

И ещё кое-что, так как супер-администратор не является полноценной ролью, то его лучше проверять по-другому, функцией is_super_admin() или правом setup_network.

if( is_super_admin() ) { // или if( current_user_can( 'setup_network' ) ) {
	// в параметры также можем передать ID определённого пользователя
}

add_role() — создание собственной роли

Функция заносит данные в базу, поэтому лучше всего её использовать только один раз, например при активации плагина или темы.

/*
 * допустим я добавлю этот код в файл плагина и сделаю так, чтобы он запускался при активации этого самого плагина
 */
register_activation_hook( __FILE__, 'true_new_role_plugin_activate' );
 
function true_new_role_plugin_activate() {
	$new_role = add_role(
		'comm_moderator', // название роли
		__( 'Comment Moderator' ), // отображаемое название роли (модератор комментариев)
		array( // массив возможностей, true - разрешено, false - запрещено
			'read'         => true,  // ну это понятно
			'moderate_comments'=> true // разрешим модерировать комментарии
		)
	);
	if ( null !== $result ) { // смотрим результат
		// роль успешно создана
	} else { 
		// если null, то значит роль уже существует
	}
}

remove_role() — удаление ролей

Также, как и add_role(), функция изменяет содержимое базы данных — а значит не нужно просто тупо вставлять её в functions.php.

В примере удалим роль, созданную в прошлой главе:

remove_role('comm_moderator'); // в качестве параметра указываем название роли и всё, дело сделано

get_role() — получение информации о группе пользователей

В случае успеха возвращает объект WP_Role (который состоит преимущественно из возможностей роли), в случае неудачи — null.

$my_role = get_role( 'comm_moderator' ); // указываем роль, которая нам нужна
print_r( $my_role ); // так можно вывести содержимое объекта

add_cap() и remove_cap() — добавление и удаление прав

Благодаря этим функциям вы можете добавить или удалить права для пользователей определенной роли или даже для пользователей с определенными ID.

Эти функции также изменяют содержимое базы данных, поэтому в качестве примера мы повесим их на активацию / деактивацию темы.

function true_author_caps(){
	global $pagenow;
	$role = get_role( 'author' ); // к примеру возьмем роль автора
	// $role = new WP_User( $user_id ); таким образом мы можем взять конкретного пользователя
	if ( 'themes.php' == $pagenow && isset( $_GET['activated'] ) ){ // если тема была активирована
		$role->add_cap( 'edit_others_posts' ); // разрешаем авторам редактировать посты других авторов
	} else { // если тема деактивирована
		$role->remove_cap( 'edit_others_posts' ); 
	}
}
 
add_action( 'load-themes.php', 'true_author_caps' ); // вешаем функцию на хук

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Комментарии — 14

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.