Роли и возможности (права) пользователей

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

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

Как обычно я начну от простого к сложному.

1. Роли

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

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

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

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

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

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

изменяем роль пользователя

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

2. Возможности

В таблице для экономии места я не стал рассматривать роль суперадминистратора и подписчика. Суперадмин это по сути тот же администратор, только с правами управления сетью сайтов (WordPress Multisite). Чуть ниже я еще напишу про него. А вот про подписчиков не напишу, так как про них и так всё понятно — имеет только одну возможность read.

.yyy{background: #4B658C;
color: #FFF;
text-align: center;}

Возможность Admin Editor Author Contributor
Плагины
install_plugins установка новых плагинов +
update_plugins обновление плагинов +
activate_plugins даёт доступ к странице плагинов +
edit_plugins возможность редактировать файлы плагинов +
delete_plugins удаление плагинов +
Темы
install_themes установка новых тем +
switch_themes изменение активной темы +
edit_themes редактирование файлов темы +
edit_theme_options изменение настроек темы +
update_themes обновление тем +
delete_themes удаление тем +
Настройки WordPress
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 возможность вставки HTML и JavaScript в посты, страницы, комментарии и виджеты + +
upload_files загрузка файлов + + +
read просмотр сайта + + + +

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

У них есть несколько собственных возможностей:

  • manage_network дает доступ в консоль сети,
  • manage_sites доступ к странице управления сайтами сети,
  • manage_network_users возможность управления пользователями сети,
  • manage_network_themes управление темами сети,
  • manage_network_options доступ к параметрам сети;

3. Уровни

Начиная с версии WordPress 3.0 уровни пользователей больше не используются!

4. Функции для работы с ролями и возможностями пользователей

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' ); // вешаем функцию на хук

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

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

%d такие блоггеры, как: