与 WordPress 集成进行授权
关于将 Logto 集成到 WordPress 的系列文章的第二部分,着重于授权。
在上一篇文章中,我们讨论了如何在 WordPress 中集成 Logto 来进行身份认证。这篇文章作为第二部分,将深入探讨授权过程,着重于 WordPress 中的角色系统以及如何实现与 Logto 的角色映射,考虑到我们在上一篇文章中使用的插件并不直接提供授权功能。
我们将创建一个角色映射功能,如根据 Logto RBAC (基于角色的访问控制) 提供的角色自动为用户分配 WordPress 角色。
理解 WordPress 用户角色
WordPress 有一个内置的用户角色管理系统,定义了用户可以在网站上执行什么操作(能力)。默认的用户角色包括管理员、编辑者、作者、贡献者和订阅者,每个角色都有自己的能力集。
这些角色对于维持站点运营的安全性和效率至关重要,因为他们可以确保用户根据他们的责任拥有适当的访问级别。
解决方案:自定义角色映射
Logto 采用基于角色的访问控制(RBAC)作为其授权模型,利用 "范围" 作为权限的最小单元。这些范围定义了认证用户在应用内允许执行的具体操作。然而,WordPress 对于管理用户权限的原则却有所不同,它依赖于预定义的 "角色" 将各种能力打包在一起。
鉴于这种基本的区别,我们建议在 Logto 内创建与在 WordPress 中定义的角色相对应的特殊角色。这些角色可能没有任何范围,只用于将用户映射到 WordPress 角色。
先决条件
在进行下一步之前,确保你有以下几点:
- 完成了有关在 WordPress 中集成 Logto 进行身份验证的上一篇文章,包括:
- 有管理员访问权限的 WordPress 站点。
- 为你的 WordPress 站点设置了 Logto 帐户里的应用。
- 在你的 WordPress 站点上已安装并配置了 OpenID Connect Generic plugin。
- 在 Logto 中设置与 WordPress 存在的角色相对应的角色。例如,如果你在 WordPress 里有一个 'editor' 角色,那么可以在 Logto 中创建一个 'group:editors' 角色。
使用自定义代码实现角色映射
为了实现角色映射,我们需要在 WordPress 主题的 functions.php
文件中添加自定义代码。这会涉及到 wp_login
动作钩子,当用户登录时会触发这个钩子。以下是一步步的指南,指导你如何设置:
第一步:访问你的主题的 functions.php 文件
打开你的主题的 functions.php
文件。通过 WordPress 管理面板可以访问这个文件,方法是导航到外观 > 主题编辑器,然后在右手边的文件列表中选取 functions.php
文件。或者在源代码中,导航到你的 WordPress 主题目录并找到 functions.php
文件。这个文件让你能够添加自定义的 PHP 功能来扩展 WordPress 站点的功能。
第二步:编写角色映射功能
下面是你可能会添加到 functions.php 中的函数的一个简单示例。这个函数将在用户登录时触发,并根据从 Logto 获取的用户的 roles
声明来分配角色。
第三步:理解代码并自定义它
-
logto_handler
函数:这个函数接受两个参数:$user_login
(用户名)和$user
(用户对象)。它从 Logto 获取存储在用户元数据 'openid-connect-generic-last-user-claim' 中的角色,根据这些角色把它们映射到对应的 WordPress 角色,并分配给用户。 -
add_action
:这条代码把logto_handler
函数钩到wp_login
动作,该动作在用户登录后触发。其中,10
是优先级(默认),2
表示函数接受的参数个数。
上例中将 'editor' 角色分配给已经通过 Logto 认证并且角色名为group:editors
的用户。然而,在真实的场景中,可能需要实现更多类型的角色映射。
你可以在这里找到 WordPress 角色及其能力的列表。
第四步:测试设置
现在,让我们通过用 Logto 中有 group:editors
角色的用户登录来测试角色映射功能。登录后,检查 WordPress 中的用户角色,确保映射工作正常。
结论
通过将 Logto 与 WordPress 集成进行身份验证和授权,你可以增强你站点的安全性和功能。请记住,虽然这里提供的代码是一个基本示例,但可能需要调整它以适应WordPress 站点的角色和权限结构。