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

13.08.2019

Теги: CMSWeb-разработкаWordPressПользовательПраваДоступаРедактор

Часто над сайтом работает несколько человек: авторы, редактроры, администраторы. У каждого из них есть свои обязанности и соответствующие права доступа. Владельцу сайта будет правильно выдать каждому из них лишь необходимые полномочия. Это в первую очередь нужно для безопасности всего сайта.

Какие бывают роли пользователей

По умолчанию в WordPress существует 5 стандартных типов пользователей:

  • Администратор (administrator)
  • Редактор (editor)
  • Автор (author)
  • Участник (contributor)
  • Подписчик (subscriber)

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

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

Функции для работы с ролями и правами

Функция add_role()

Добавляет новую роль, должна быть вызвана всего один раз. Потому что она изменяет данные в базе данных (таблица wp_options, поле wp_user_roles). Поэтому лучше изменять их во время активации/деактивации плагина или темы.

register_activation_hook(__FILE__, function() {
    // проверяем права пользователя на активацию плагинов
    if (!current_user_can('activate_plugins')) {
        return;
    }
    // добавляем новую роль «Модератор»
    add_role(
        'moderator',
        'Модератор',
        array(
            'read'                => true,  // true разрешает эту возможность
            'edit_others_posts'   => true,  // true разрешает редактировать посты
            'delete_others_posts' => false, // false запрещает удалять посты
        )
    );
});

Функция remove_role()

Удаляет роль, должна быть вызвана всего один раз. Потому что она изменяет данные в базе данных (таблица wp_options, поле wp_user_roles). Поэтому лучше изменять их во время активации/деактивации плагина или темы.

register_deactivation_hook(__FILE__, function() {
    // проверяем права пользователя на деактивацию плагинов
    if (!current_user_can('deactivate_plugins')) {
        return;
    }
    // удаляем новую роль «Модератор»
    remove_role('moderator');
});

Функция get_role()

Получает массив (объект) данных с возможностями указанной роли.

$role = get_role('author');
print_r($role);
WP_Role Object
(
    [name] => author
    [capabilities] => Array
        (
            [upload_files] => 1
            [edit_posts] => 1
            [edit_published_posts] => 1
            [publish_posts] => 1
            [read] => 1
            [level_2] => 1
            [level_1] => 1
            [level_0] => 1
            [delete_posts] => 1
            [delete_published_posts] => 1
        )
)

Примеры использования функции:

register_activation_hook(__FILE__, function() {
    // проверяем права пользователя на активацию плагинов
    if (!current_user_can('activate_plugins')) {
        return;
    }
    // добавляем возможность загрузки файлов для роли «Подписчик»
    $subscriber = get_role('subscriber');
    if (!$subscriber->has_cap('upload_files')) {
        $subscriber->add_cap('upload_files');
    }
});
register_deactivation_hook(__FILE__, function() {
    // проверяем права пользователя на деактивацию плагинов
    if (!current_user_can('deactivate_plugins')) {
        return;
    }
    // удаляем возможность загрузки файлов для роли «Подписчик»
    $subscriber = get_role('subscriber');
    if ($subscriber->has_cap('upload_files')) {
        $subscriber->remove_cap('upload_files');
    }
});

Функция wp_roles()

Получает глобальную переменную $wp_roles, если она не определена, записывает в нее экземпляр класса WP_Roles.

Функция current_user_can()

Позволяет проверить права текущего пользователя.

Функция user_can()

Позволяет проверить права указанного пользователя.

Функция author_can()

Проверяет указанную возможность у автора указанного поста.

Дополнительно

Поиск: CMS • Web-разработка • WordPress • Пользователь • Права доступа • Редактор

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.