Интеграция с WordPress для авторизации
Вторая часть серии о интеграции Logto с WordPress, с фокусом на авторизацию.
Вторая часть серии о интеграции Logto с WordPress, с фокусом на авторизацию.
В предыдущей статье мы обсуждали, как интегрировать Logto для аутентификации в WordPress. В этой статье, как во второй части, мы углубимся в процесс авторизации, сосредоточив внимание на системе ролей в WordPress и на том, как реализовать сопоставление ролей с Logto, учитывая, что плагин, который мы использовали в предыдущей статье, не предоставляет возможности авторизации напрямую.
Мы создадим функцию сопоставления ролей, которая автоматически назначает роли WordPress пользователям на основе их ролей, предоставленных Logto RBAC (Управления доступом на основе ролей).
В WordPress встроена система управления ролями пользователей, которая определяет, какие действия (возможности) пользователь может выполнять на сайте. В стандартные роли пользователей входят Администратор, редактор, автор, участник и подписчик, каждый из которых имеет свой набор возможностей.
Эти роли критически важны для поддержания безопасности и эффективности операций на сайте, так как они помогают убедиться, что у пользователей есть соответствующий уровень доступа на основе их обязанностей.
Logto использует Управление доступом на основе ролей (RBAC) в качестве своей модели авторизации, используя "scopes" в качестве наименьшей единицы разрешения. Эти scopes определяют конкретные действия, которые аутентифицированный пользователь может выполнять в приложении. Однако WordPress работает по другому принципу управления разрешениями для пользователей, полагаясь на предопределенные "роли", которые объединяют разные возможности вместе.
Учитывая эту фундаментальную разницу, мы предлагаем создать специальные роли внутри Logto, которые соответствуют ролям, определенным в WordPress. Эти роли могут не иметь никаких scopes, они используются только в качестве ссылки для сопоставления пользователей с ролями WordPress.
Прежде чем приступить, убедитесь, что у вас есть следующее:
Для реализации сопоставления ролей мы добавим пользовательский код в файл functions.php темы WordPress. Это включает использование хука действия wp_login, который срабатывает, когда пользователь входит в систему. Вот пошаговое руководство по настройке этого:
Откройте файл functions.php вашей темы. Вы можете получить доступ к этому файлу через панель администратора WordPress, перейдя в Внешний вид > Редактор темы и выбрав functions.php из списка файлов с правой стороны. Или в исходном коде перейдите в каталог темы WordPress и найдите файл functions.php. Этот файл позволяет добавлять пользовательские функции PHP, которые расширяют функциональность вашего сайта WordPress.
Ниже приведен простой пример функции, которую вы можете добавить в functions.php. Эта функция будет срабатывать при входе пользователя в систему, и она будет назначать роли на основе пользователя roles claim, полученного из Logto.
функция 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 и их возможности здесь.
Теперь давайте проверим функцию сопоставления ролей, войдя под пользователем, у которого есть роль group:editors в Logto. После входа в систему проверьте роль пользователя в WordPress, чтобы убедиться, что сопоставление работает корректно.
Интегрируя Logto с WordPress для аутентификации и авторизации, вы можете улучшить безопасность и функциональность вашего сайта. Помните, что предоставленный здесь код является базовым примером, и вам, возможно, потребуется адаптировать его, чтобы он соответствовал структуре ролей и разрешений вашего сайта WordPress.