Использование ролей пользователей в WordPress

Роли были неотъемлемой частью WordPress в течение довольно продолжительного времени – многие функции, связанные с управлением ими были на месте с версии 2.0.0. Несмотря на это долговечность, они редко используются, который является позором, поскольку они позволяют легко настроить пользовательские типы пользователей (а также имеют возможность микро-управлять ими). В этой статье вы узнаете все, что вам нужно, чтобы использовать роли пользователей в WordPress и сделать большую часть этой невероятной встроенной функциональности.


Большой вид.

Терминологии

Основными терминами, которые нужно знать, являются “роль” и “способность”. Возможности являются ядром системы, они представляют то, что вы можете сделать. Примером возможности является switch_themes . Пользователь, который имеет эту возможность, может изменить внешний вид веб-сайта с помощью раздела Внешний вид в админе. Те, кто не обладает такой возможностью, не смогут этого сделать.

Дальнейшее чтение на SmashingMag:

Роли просто именуемый набор возможностей. Представьте, что у вас есть такие edit_post возможности, add_user как, и так далее. Вместо того, чтобы перечислять все 50 из них для каждого пользователя, который вы хотели бы быть админ, просто назначить каждому пользователю “админ” роль, а затем назначить все возможности этой роли.

Настройка по умолчанию

По умолчанию WordPress имеет шесть ролей и около 57 возможностей. Каждая роль имеет различное сочетание возможностей, которые наделяет пользователя соответствующими правами и привилегиями.

Например, автор может отсеивать и удалять свои собственные публикации, но не может контролировать публикацию этих публикаций (и не может удалять эти публикации после их публикации). Это потому, что они имеют edit_posts и delete_posts возможности, но они не имеют publish_post и delete_published_post возможностей.

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

Когда необходимы новые роли и возможности

Новые роли обычно приходят рука об руку с новыми возможностями. Обычно мы сначала создаем набор новых возможностей, которыми занимается админ (и новая роль, а также). Давайте посмотрим на пример.

Если у вас есть большой веб-сайт, скорее всего, у вас есть маркетинговая команда. Эта команда не должна иметь возможность отодвигать и публиковать публикации, но им нужен доступ к статистике рекламы, темам поиска трендов и т.д. Возможно, было бы также полезно, чтобы позволить им управлять категориями и комментариями для SEO целей и удовлетворенности клиентов, соответственно.

Наш первый заказ бизнеса заключается в том, чтобы посмотреть на рекламную статистику и трендовых поисков. Это не то, что WordPress предлагает по умолчанию, так что давайте предположим, он был построен как плагин. Давайте создадим возможность под названием view_stats . Это будет уделено маркетинга людей и, конечно, для админа. Другие пользователи – как редакторы и авторы – не нужно видеть статистику (которая, во многих случаях, конфиденциальные данные), поэтому они не будут получать эту возможность.

Наша вторая задача состоит в том, чтобы решить, какие другие возможности наши маркетинговые люди нуждаются. Основываясь на наших предположениях выше, они будут нуждаться в read manage_links , и manage_categories moderate_comments возможности.

Наконец, мы будем использовать некоторые кодирования отбивные для создания новой роли под названием “Маркетинг”, и назначить вышеупомянутые возможности к нему. Как только это будет сделано, мы можем назначить роль “Маркетинг” для любого пользователя в “Добавить пользователя” и “Изменить профиль” страницы.

Основные функции WordPress

Для эффективного управления ролями и возможностями все, что вам нужно, это пять очень простых функций:

  • add_role()– Позволяет добавить пользовательскую роль
  • remove_role()– Позволяет удалить пользовательскую роль
  • add_cap()– Позволяет добавлять пользовательские возможности в роль
  • remove_cap()– Позволяет удалить пользовательские возможности из роли
  • get_role()– Получает информацию о роли, а также связанных с ними возможностей

Если вы хотите просмотреть документацию для этих функций, можно ознакомиться с разделом ролей и возможностей в Кодексе.

Внедрение новых ролей и возможностей

Полное осуществление ролей и возможностей требует большего, чем просто пять функций, о которых я говорил. Нам также нужно будет использовать функции для проверки возможностей, нам понадобятся функции, доступные только определенным ролям, и так далее.

Добавление ролей и возможностей


$marketing = add_role( 'marketing', 'Marketing', array(
    'read' => true,
    'manage_links', 
    'manage_categories', 
    'moderate_comments',
    'view-stats'
));

$role = get_role( 'administrator' );
$role->add_cap( 'view-stats' );  

Функция выше добавит нашу новую роль “Маркетинг”. Он добавляет четыре возможности, которые уже включены в WordPress и пятый, который является пользовательской возможности. Как вы можете видеть, никаких специальных кодирования не требуется, чтобы добавить пользовательские колпачки – просто включить их в массив при добавлении роли. Как только мы добавим новую роль, мы обязательно добавим наши новые возможности и к роли админа.

Обратите внимание, что add_role() fuction возвращает WP_Role объект на успех или если роль уже NULL существует.

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


добавить действие (‘admin’init’, ‘добавить-обычай);;

функция добавленная (пользовательская роль)
$marketing – добавить роль (“маркетинг”, “Маркетинг”, массив(
‘читать’ » » » и gt; правда,
‘Управление-ссылки’,
‘Управление»,
«умеренные комментарии»,
‘View-stats’
));

если (null ! » $marketing )
$role и получить роль (“администратор”) ;
$role-гт;добавить кап (‘вид-статистика’);
}
}

Проверка возможностей и ролей

Как только мы имеем нашу систему в месте, мы можем проверить для возможностей и ролей. Это позволяет нам убедиться, что только пользователи с правильными возможностями могут делать определенные вещи.


add_action('admin_menu', 'register_stats_Page');

function register_stats_Page() {
    add_menu_page( 'Marketing Info', 'Marketing Info', 'view_stats', 'marketing-info', 'show_marketing_info' );
}

function show_marketing_info(){
   if( ! current_user_can( 'view-stats' ) ) {
      die( 'You are not allowed to view this page' );
   }
   echo "
This is the marketing stats page
"; 
}  

Приведенный выше код добавит меню верхнего уровня в область админа для нашей страницы маркетинговой статистики. add_menu_page()Функция позволяет указать возможность (третий аргумент), которая определяет, показано ли меню.

Обратите внимание, что, несмотря на то, что сама функция использует эту возможность в add_menu_page() качестве аргумента, нам все равно нужно проверить ее в функции, которая отображает содержимое страницы.

Это приводит нас в наших следующих двух функций красиво: current_user_can() и user_can() .

Если вы хотите проверить, имеет ли пользователь, зарегистрированный в настоящее время, определенную возможность, просто используйте следующий формат:


if( current_user_can( 'any_capability' ) ) {
    // The user has the capability
}
else {
    // The user does not have the capability
}  

Если вы хотите проверить, имеет ли произвольный пользователь определенные возможности, используйте user_can() эту функцию:


if( user_can( 45, 'any_capability' ) ) {
    // The user with the ID of 45 has the capability
}
else {
    // The user with the ID of 45 does not have the capability
}  

В дополнение к возможностям, обе функции могут проверить на наличие ролей, а также:


if( current_user_can( 'marketing' ) ) {
    // The current user is a marketing person
}
else {
    // The current user is not a marketing person
}  

Создание типов пользователей

Хотя это и не официальный термин, я называю разные роли “типами пользователей”, когда они требуют много различных изменений интерфейса. Скажем, вы строите тематический рынок, например. Помимо администратора, который контролирует все (и авторы, которые будут писать в блоге компании) у вас также есть покупатели и продавцы. Это оба зарегистрированных пользователей вашего сайта, но потребует несколько различных фронт-эндов.

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

Профиль продавца будет портфолио его работы, его самых популярных предметов, и так далее. При ввоза в систему он, вероятно, следует увидеть статистику продаж.

Выяснение ролей и разрешений

Чтобы сделать вещи простыми, пользователи либо купить или продать, и не может сделать и то, и другое. Давайте создадим две роли с набором возможностей (с верхней части моей головы …):


add_action( 'admin_init', 'add_custom_roles' );

function add_custom_roles() {
    $seller = add_role( 'seller', 'Seller', array(
        'read' => true,
        'delete_posts' => true,
        'edit_posts' => true,
        'delete_published_posts' => true,
        'publish_posts' => true,
        'upload_files' => true,
        'edit_published_posts' => true,
        'view_sales' => true,
        'moderate_comments' => true
    ));

    $role = get_role( 'administrator' );

    if( null !== $seller ) {
        $role->add_cap( 'view_sales' );
        $role->add_cap( 'view_others_sales' );
   }

    $buyer = add_role( 'buyer', 'Buyer', array(
        'read' => true,
        'add_payment' => true,
        'download_resources' => true
    ));

    if( null !== $buyer ) {
        $role->add_cap( 'add_payment' );
        $role->add_cap( 'add_others_payment' );
        $role->add_cap( 'download_resources' );
        $role->add_cap( 'download_others_resources' );
   }

}  

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

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

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

Реализация фронтендов

С этого момента это вопрос использования нашей роли и функций проверки возможностей, чтобы определить, кто видит, что. Давайте взглянем на несколько примеров:

Перечисление пользователей

Если перечислить всех пользователей на сайте, мы можем показать товары, купленные для покупателей, и товары, проданные продавцам. Вот как это сделать:


<!-- 
  User Data comes from a WordPress user object stored in the $user variable 
--> 

<div class='user'>
  <div class='row'>
    <div class='threecol'>
      <?php echo get_avatar( $user->ID, 120 ) ?>
    </div>
    <div class='sixcol'>
      <h1><?php echo $user->display_name ?></h1>
      <?php echo $user->description ?>
    </div>
    <div class='threecol last'>
      <?php if( user_can( $user->ID, 'buyer' ) ) : ?>  
        <div class='counter'>
          <span class='number'><?php get_purchases_count( $user->ID ) ?></span>
          <span class='text'>purchases</span>
        </div>
      <?php else ?>
        <div class='counter'>
          <span class='number'><?php get_sales_count( $user->ID ) ?></span>
          <span class='text'>sales</span>
        </div>      
      <?php endif ?>
    </div>
  </div>
</div>  

Большая часть этого простой старый HTML, но важно, чтобы забрать, как счетчик создается. Обратите внимание, что get_purchases_count() и get_sales_count() функции являются фиктивными (они не являются частью WordPress, конечно).

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


foreach( $users as $user_id ) {
    $user = get_userdata( $user_id );
    if( user_can( $user->ID, 'buyer' ) ) {
        get_template_part( 'userlist', 'buyer' );
    }
    else {
        get_template_part( 'userlist', 'seller' );
    }
}  

При цикле через наших пользователей выше, либо userlist-buyer.php или userlist-seller.php будет использоваться, в зависимости от роли пользователя.

Заключение

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

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

(jvB) (il) (jc) (js)

Источник: smashingmagazine.com

Великолепный Журнал

Великолепный, сокрушительный, разящий (см. перевод smashing) независимый журнал о веб-разработке. Основан в 2006 году в Германии. Имеет няшный дизайн и кучу крутых авторов, которых читают 2 млн человек в месяц.

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

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