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

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

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

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

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

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

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

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

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

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

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

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

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

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

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

Редактор (editor)

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

Автор (author)

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

Участник (contributor)

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

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

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

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

Вы наверное подумали: «Так, а где роль суперадмина?» Почему я не рассказал про неё в самом начале? А это даже и не совсем роль – это роль администратора с возможностью управления сетью 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

edit_themes

edit_theme_options

install_themes

delete_themes

update_themes

activate_plugins

edit_plugins

install_plugins

edit_users

manage_options

moderate_comments

manage_categories

upload_files

import

export

unfiltered_html

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

edit_posts

edit_others_posts

edit_published_posts

publish_posts

delete_posts

delete_others_posts

delete_published_posts

delete_private_posts

edit_private_posts

read_private_posts

edit_pages

publish_pages

edit_others_pages

edit_published_pages

delete_pages

delete_others_pages

delete_published_pages

edit_private_pages

read_private_pages

delete_private_pages

delete_users

create_users

list_users

remove_users

promote_users

unfiltered_upload

С версии 2.3.

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

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

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

define( 'ALLOW_UNFILTERED_UPLOADS', true );

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

edit_dashboard

customize

delete_site

update_plugins

delete_plugins

update_core

edit_comment

create_sites

delete_sites

manage_network

manage_sites 

manage_network_users

manage_network_themes

manage_network_options

manage_network_plugins

upload_plugins

upload_themes

upgrade_network

setup_network

read

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

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

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

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

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' ); // вешаем функцию на хук
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии