Права доступа пользователей в 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мотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб