Возможность WordPress

Оригинальное название: WordPress capability

Коротко

Право на одно конкретное действие — например, edit_posts или manage_options, — из таких прав складываются роли пользователей, а код проверяет именно их.

Что такое «Возможность WordPress»

Роль «Редактор» сама по себе ничего не разрешает: это лишь название для набора возможностей. Когда пользователь нажимает «Опубликовать», WordPress проверяет не роль, а наличие права publish_posts. Такая схема позволяет тонко настраивать доступ: дать менеджеру магазина управление заказами, но не настройками сайта, или запретить автору загружать файлы. Список ролей с их возможностями хранится в базе, в опции wp_user_roles.

Простые и мета-возможности

Возможности бывают двух видов. Простые — edit_posts, upload_files, manage_options — прямо записаны в роли. Мета-возможности вроде edit_post или delete_user относятся к конкретному объекту и в ролях не хранятся. Функция map_meta_cap() превращает их в простые: правка своей черновой записи требует edit_posts, чужой — edit_others_posts, уже опубликованной — edit_published_posts.

Пример проверки и выдачи права

// проверка в своём коде: может ли пользователь править эту запись
if ( current_user_can( 'edit_post', $post_id ) ) {
    // показываем кнопку «Редактировать»
}

// выдать редакторам доступ к меню и виджетам — один раз, при активации плагина
register_activation_hook( __FILE__, function () {
    get_role( 'editor' )->add_cap( 'edit_theme_options' );
} );

Метод add_cap() записывает изменение в базу. Вызывать его на каждой загрузке страницы бессмысленно — это лишняя запись в базу при каждом запросе.

Типичные ошибки

  • Проверка роли вместо права: current_user_can( 'administrator' ) работает, но ломается, как только роли переименуют или появится своя роль с теми же правами.
  • Проверка только права без проверки nonce в обработчиках форм и AJAX: злоумышленник может заставить администратора выполнить действие по подделанной ссылке.
  • Права, выданные плагином управления ролями, остаются в базе и после удаления плагина.

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

Обновлено:

Все термины раздела «WordPress»

Что будем искать? Например,Продвижение