Права доступа пользователей в WordPress

Ни один серьёзный проект не обходится без функции разграничения пользователей по уровням доступа. Для этого в WordPress существует несколько функций, которые помогают определить имеет ли пользователь роль или нет. В этой статье разберём следующие функции:
  • current_user_can - проверяет права текущего пользователя
  • user_can - проверяет права указанного пользователя
  • author_can - проверяет есть ли у автора указанного поста возможность или роль
Рассмотрим все пункты по порядку.

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

Функция "current_user_can" проверяет права текущего пользователя на совершение действия. Функция возвращает логические "true", если права есть, или "false", если их нет. У функции есть два аргумента:
current_user_can( $capability, $args );
Первый аргумент "$capability" содержит значение в виде строки, а именно название возможности. Список возможностей от ролей можно найти в таблице ниже.

Второй аргумент "$args" может содержать несколько типов данных. К примеру, он может содержать ID поста.

Список ролей в WordPress и их прав:
Код права Супер
Админ
Админ Редактор Автор Участник Подписчик
read да да да да да да
delete_posts да да да да да
edit_posts да да да да да
delete_published_posts да да да да
edit_published_posts да да да да
publish_posts да да да да
upload_files да да да да
delete_others_pages да да да
delete_others_posts да да да
delete_pages да да да
delete_private_pages да да да
delete_private_posts да да да
delete_published_pages да да да
edit_others_pages да да да
edit_others_posts да да да
edit_pages да да да
edit_private_pages да да да
edit_private_posts да да да
edit_published_pages да да да
manage_categories да да да
manage_links да да да
moderate_comments да да да
publish_pages да да да
read_private_pages да да да
read_private_posts да да да
unfiltered_html да да* да*
activate_plugins да да**
create_users да да*
deactivate_plugins да да
delete_plugins да да*
delete_themes да да*
delete_users да да*
edit_dashboard да да
edit_files да да*
edit_plugins да да*
edit_theme_options да да
edit_themes да да*
edit_users да да*
export да да
import да да
install_languages да да*
install_plugins да да*
install_themes да да*
list_users да да
manage_options да да
promote_users да да
remove_users да да
switch_themes да да
update_core да да*
update_languages да да*
update_plugins да да*
update_themes да да*
manage_network_options да
manage_network_plugins да
manage_network_themes да
manage_network_users да
manage_network да
manage_sites да
setup_network да
upgrade_network да
* - Один сайт
** - Один сайт или можно включить в настройках

Пример простейшего использования для проверки прав на редактирование настроек сайта:
if( current_user_can( 'manage_options' ) ){
   echo 'Вы можете редактировать настройки сайта';    
}
Расспотрим способ использования на примере проверки прав на редактирование публикации под номером ID=9:
if( current_user_can( 'edit_post', 9 ) ){
   echo 'Вы можете редактировать публикацию c ID=9';    
}
Список прав пользователей в WordPress (в примере выше была проверка права "edit_post"):
Символьный код Описание права
delete_user удаление пользователя
edit_user изменение пользователя
delete_post удаление публикации
delete_page удаление страницы
edit_post изменение публикации
edit_page изменение страницы
edit_comment изменение комментария
read_post чтение публикации
read_page чтение страницы
edit_term изменение терминов
delete_term удаление терминов
assign_term назначение терминов
activate_plugin активация плагинов
deactivate_plugin деактивация плагинов
export_others_personal_data экспорт персональных данных другого пользователя
erase_others_personal_data удаление персональных данных другого пользователя
manage_privacy_options изменение настроек приватности

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

Если необходимо проверить права для другого пользователя, а не текущего, то необходимо сделать функцию "user_can". Первым аргументом эта функция принимает ID пользователя (число), а вторым - роль, которую нужно проверить. Третий аргумент служит для передачи ID объекта, который нужно проверить.
user_can( $user_id, $capability, $object_id );
Модифицируем предыдущие примеры для использования этой функции. Проверим может ли пользователь с ID=8 редактировать настройки сайта:
$user_id = 8; // проверим пользователя с ID=8
if( user_can($user_id, 'manage_options') ){
   echo 'Пользователь с ID=8 может редактировать настройки сайта';    
}
Сделаем проверку для этого же пользователя на возможность редактирования публикации с ID равным 73:
$user_id = 8; // проверим пользователя с ID=8
$post_id = 73; // проверим доступность публикации с ID=73
if( user_can($user_id, 'edit_post', $post_id ) ){
   echo 'Пользователь с ID=8 может редактировать публикацию с ID=73';    
}

Проверка роли автора

Для проверки роли автора публикации можно использовать функцию "author_can". Эта функция принимает два аргумента:
author_can( $post_id, $capability );
Первый аргумент "$post_id" - это ID поста, автора которого нужно проверить. Второй аргумент "$capability" - это название роли для проверки. Приведём пример, где проверим возможность автора поста с ID равным 74 на публикацию постов:
$post_id = 74; // проверим автора поста с ID=74
if( user_can($post_id, 'publish_posts' ) ){
   echo 'Автор поста с ID=74 может публикаовать посты';    
}else{
   echo 'Автору поста с ID=74 запрещено публикаовать посты';    
}
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: