Использование WordPress для разработки веб-приложений. Элементы: управление пользователями

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

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

Компоненты веб-приложений

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

  • Управление пользователями;
  • Доступы;
  • Управление сессиями;
  • E-mail функционал;
  • Сериализация и поиск данных;
  • URL-маршрутизация (иногда ее еще называют переписыванием URL-адресов или правил или просто маршрутов);
  • Кэширование;
  • Поддержка пользовательских запросов.

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

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

Перед нами не стоит задача предусмотреть все возможные элементы, которые только существуют. Напротив, нам нужно использовать те из доступных элементов, которые нам действительно нужны.

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

Управления пользователями и права доступа

Любой, кто когда-либо использовал в своей работе WordPress — даже если это было просто ведение блога и в основном ему приходилось иметь дело с управлением контентом — знаком в общих чертах с системой пользователей.

То есть, вы создаете имя пользователя, пароль для него, а затем заполняете профиль.

Более опытные девелоперы знакомы с основными принципами ролей и прав. Рискну предположить, что те, кто использует WordPress, довольно хорошо знакомы с этой системой, даже если они никогда не читали Кодекс и не возились с написанием собственного кода.

Общая идея очень проста: пользователям представляется индивидуальный профиль в виде учетной записи WordPress. Их роль назначается при создании учетной записи.

Это может быть:

  • Подписчик;
  • Участник;
  • Автор;
  • Редактор;
  • Администратор.

Большинство из тех, кто работал с WordPress, знаком с этими ролями, не так ли? Но как в эту картину вписываются права доступа?

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

права доступа

Добавление нового пользователя с Ролью

Тут есть один нюанс: Если вы создаете приложение на WordPress, доступные интерфейсы позволяют заблокировать пользователей из областей, которые были созданы на основе их ролей и прав.

Программное создание пользователя

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

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

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

Для этого нужно сделать следующее:

  • Получить адрес электронной почты пользователя;
  • Проверить, действительно ли данный почтовый ящик принадлежит пользователю;
  • Если да, то создать пользователя;
  • В противном случае, не создавать пользователя и сформировать сообщение об ошибке.

Кажется, все просто и понятно? Конечно, это означает, что вы можете сразу сгенерировать пароль для пользователя при создании своей учетной записи. К счастью, для этого существует специальное приложение.

Вот, например, как программно создать пользователя, основываясь на указанном им адресе электронной почты (пароль генерируется автоматически).

if ( null == username_exists( $email_address ) ) {
 
    $password = wp_generate_password( 12, false );
    $user_id = wp_create_user( $email_address, $password, $email_address );
 
    wp_update_user(
        array(
            'ID'          =>    $user_id,
            'nickname'    =>    $email_address
        );
    );
 
} else {
    // Имя пользователя уже существует, поэтому информация обрабатывается, исходя из этого
}

После этого, вам фактически нужно создать новый объект WP_User:

$user = new WP_User( $user_id );

Это то, что позволит нам установить роль для данного пользователя.

Установление роли и прав для пользователя

Наконец, пришло время определить, какую роль и набор прав вы зададите пользователю.

С одной стороны, вы можете жестко задать эти значения на основе параметров, которые предлагаются WordPress. Но можете также создать собственные роли и права. Это уже выходит за рамки данной статьи, но, возможно, мы уделим этому внимание в будущих частях данной серии статей.

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

Сама роль устанавливается просто:

$user->set_role( 'contributor' );

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

Просто подключите этот модуль к своему собственному шаблону, валидации, аутентификации и проверки входящие данных $ _POST, и все готово к работе:

if ( null == username_exists( $email_address ) ) {
 
    // Генерируем пароль и создаем пользователя
    $password = wp_generate_password( 12, false );
    $user_id = wp_create_user( $email_address, $password, $email_address );
 
    // Устанавливаем псевдоним
    wp_update_user(
        array(
            'ID'          =>    $user_id,
            'nickname'    =>    $email_address
        );
    );
 
    // Устанавливаем роль
    $user = new WP_User( $user_id );
    $user->set_role( 'contributor' );
 
} else {
    // Теперь пользователь создан
} // завершение цикла if/else

Неплохо, правда?

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

Но создание пользователя, а затем фактическое сохранение его данных в базе это только половина дела, не правда ли?

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

И возникает закономерный вопрос: После того, как пользователь вошел в систему, как нам определить его роль?

К счастью, с помощью функционала WordPress это делается очень просто:

  • Во-первых, нам нужно получить ID текущего пользователя;
  • После этого, мы можем определить роль пользователя, и дальнейшая процедура выполняется согласно соответствующей ей логике.

Нам нужно будет воспользоваться функцией wp_get_current_user(), а затем определить текущее значение объекта WP_User (используя для этого ID текущего пользователя). После этого мы можем рассмотреть права пользователя.

Рассмотрим приведенный ниже код:

// получаем объект текущего пользователя
$user_id = wp_get_current_user()->ID;
$user = new WP_User( $user_id );

Снова неплохо, правда?

Теперь несложно будет составить код условия, например:

// С помощью этой команды мы выводим права пользователя
print_r( $user->wp_capabilities );
 
// Что в свою очередь позволяет осуществить проверку:
if ( '1' === $user->wp_capabilities['subscriber'] ) {
    // Наш пользователь является подписчиком
}

Существует и альтернативный способ сделать то же самое. А именно:

global $current_user;
get_currentuserinfo();
 
if ( 0 === $current_user->user_level ) {
    // Налицо имеем подписчика
}

Правда, при этом возникает вопрос, откуда же взялся ноль? Давайте выясним это.

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

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

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

Но пользователю нужна электронная почта!

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

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

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

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

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

Перевод статьи «Using WordPress For Web Application Development: Features: User Management» был подготовлен дружной командой проекта Сайтостроение от А до Я.