Русский
  • oidc
  • wordpress

Интеграция с WordPress для авторизации

Вторая часть серии о интеграции Logto с WordPress, с фокусом на авторизацию.

Sijie
Sijie
Developer

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

Мы создадим функцию сопоставления ролей, которая автоматически назначает роли WordPress пользователям на основе их ролей, предоставленных Logto RBAC (Управления доступом на основе ролей).

Понимание ролей пользователей WordPress

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

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

Решение: настраиваемое сопоставление ролей

Logto использует Управление доступом на основе ролей (RBAC) в качестве своей модели авторизации, используя "scopes" в качестве наименьшей единицы разрешения. Эти scopes определяют конкретные действия, которые аутентифицированный пользователь может выполнять в приложении. Однако WordPress работает по другому принципу управления разрешениями для пользователей, полагаясь на предопределенные "роли", которые объединяют разные возможности вместе.

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

Предварительные условия

Прежде чем приступить, убедитесь, что у вас есть следующее:

  • Завершите предыдущую статью об интеграции Logto с WordPress для аутентификации, это включает:
  • Сайт WordPress с доступом администратора.
  • Учетная запись Logto с настроенным приложением для вашего сайта WordPress.
  • Плагин OpenID Connect Generic установлен и настроен на вашем сайте WordPress.
  • Настройте роли в Logto, которые соответствуют ролям в WordPress. Например, если у вас есть роль 'редактор' в WordPress, создайте роль 'group:editors' в Logto.

Реализация сопоставления ролей с помощью пользовательского кода

Для реализации сопоставления ролей мы добавим пользовательский код в файл functions.php темы WordPress. Это включает использование хука действия wp_login, который срабатывает, когда пользователь входит в систему. Вот пошаговое руководство по настройке этого:

Шаг 1: получите доступ к functions.php вашей темы

Откройте файл functions.php вашей темы. Вы можете получить доступ к этому файлу через панель администратора WordPress, перейдя в Внешний вид > Редактор темы и выбрав functions.php из списка файлов с правой стороны. Или в исходном коде перейдите в каталог темы WordPress и найдите файл functions.php. Этот файл позволяет добавлять пользовательские функции PHP, которые расширяют функциональность вашего сайта WordPress.

Шаг 2: напишите функцию сопоставления ролей

Ниже приведен простой пример функции, которую вы можете добавить в functions.php. Эта функция будет срабатывать при входе пользователя в систему, и она будет назначать роли на основе пользователя roles claim, полученного из Logto.

Шаг 3: понимание кода и его настройка

  • функция logto_handler: эта функция принимает два параметра: $user_login (имя пользователя) и $user (объект пользователя). Она извлекает роли из Logto, которые хранятся в пользовательских метаданных как openid-connect-generic-last-user-claim, сопоставляет эту роль с соответствующей ролью WordPress и назначает ее пользователю.

  • add_action: Эта строка привязывает функцию logto_handler к действию wp_login, которое срабатывает после входа пользователя в систему. 10 - это приоритет (по умолчанию), а 2 указывает количество аргументов, которые принимает функция.

Приведенный выше пример назначает роль 'редактор' пользователям, аутентифицированным через Logto с именем роли group:editors. Однако в реальной ситуации вам, вероятно, потребуется реализовать больше видов сопоставления ролей.

Вы можете найти список ролей WordPress и их возможности здесь.

Шаг 4: проверьте вашу настройку

Теперь давайте проверим функцию сопоставления ролей, войдя под пользователем, у которого есть роль group:editors в Logto. После входа в систему проверьте роль пользователя в WordPress, чтобы убедиться, что сопоставление работает корректно.

Заключение

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