У цій статті ми хотіли б розповісти, як 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 For WordPress Web Application Development: Features: User Management» був підготовлений дружною командою проекту Сайтостроение від А до Я.