與 WordPress 整合以進行授權
這是將 Logto 與 WordPress 整合的系列文章的第二部分,專注於授權。
在之前的文章中,我們討論了如何在 WordPress 中整合 Logto 進行身份驗證。作為第二部分,這篇文章將深入探討授權過程,重點介紹 WordPress 中的角色系統以及如何與 Logto 實現角色映射,因為我們在上一篇文章中使用的插件並未直接提供授權功能。
我們將創建一個角色映射功能,根據 Logto RBAC(基於角色的訪問控制)提供的角色,自動為用戶分配 WordPress 角色。
理解 WordPress 用戶角色
WordPress 有內建的用戶角色管理系統,定義了用戶在網站上可以執行的操作(功能)。默認的用戶角色包括管理員、編輯、作者、貢獻者和訂閱者,每個角色都有其自己的功能集。
這些角色對於維護網站運行的安全性和效率非常重要,因為它們有助於確保用戶擁有適合他們職責的訪問級別。
解決方案:自定義角色映射
Logto 採用基於角色的訪問控制(RBAC)作為其授權模型,利用“範圍”作為最小的許可單位。這些範圍定義了認證用戶在應用程式中允許執行的特定操作。然而,WordPress 依靠預定義的“角色”管理用戶權限,將各種功能捆綁在一起運作原理有所不同。
鑑於這一基本差異,我們建議在 Logto 中創建與 WordPress 中定義的角色相對應的特殊角色。這些角色可能不具有任何範圍,它們僅用作將用戶映射到 WordPress 角色的參考。
先決條件
在繼續之前,請確保你擁有以下內容:
- 完成上一篇文章,將 Logto 與 WordPress 整合進行身份驗證,包括:
- 具有管理員訪問權限的 WordPress 網站。
- 設置用於 WordPress 網站的 Logto 帳戶。
- 在 WordPress 網站上安裝並配置 OpenID Connect Generic 插件。
- 在 Logto 中設置與 WordPress 中角色相對應的角色。例如,如果你在 WordPress 中有一個“editor”角色,請在 Logto 中創建一個“group:editors”角色。
實施自定義代碼的角色映射
為了實施角色映射,我們將在 WordPress 主題的 functions.php
文件中添加自定義代碼。這涉及到使用 wp_login
動作鉤子,該鉤子在用戶登錄時觸發。以下是設置此方法的分步指南:
步驟 1:訪問你的主題的 functions.php
打開主題的 functions.php
文件。你可以通過導航到 WordPress 管理控制台中的外觀 > 主題編輯器,並從右側文件列表中選擇 functions.php
訪問該文件。或者在源代碼中導航到你的 WordPress 主題目錄並找到 functions.php
文件。此文件允許你添加自定義 PHP 函數,以擴展 WordPress 網站的功能。
步驟 2:編寫角色映射函數
以下是一個你可以添加到 functions.php 的函數的 簡單示例。此函數會在用戶登錄時觸發,並根據從 Logto 提取的用戶 roles
聲明分配角色。
步驟 3:理解代碼並自定義它
-
logto_handler
函數:此函數接受兩個參數:$user_login
(用戶名)和$user
(用戶對象)。它從儲存在 user meta 中的openid-connect-generic-last-user-claim
中檢索 Logto 的角色,將該角色映射到相應的 WordPress 角色,並分配給用戶。 -
add_action
:此行將logto_handler
函數掛接到wp_login
操作,此操作在用戶登錄後觸發。10
是優先級(默認),2
表示該函數接受的參數數量。
上述示例為通過 Logto 验證的用戶(角色名稱為 group:editors
)分配“editor”角色。然而,在實際情況中,你可能需要實施更多種類的角色映射。
你可以在這裡找到 WordPress 角色及其功能的列表。
步驟 4:測試你的設置
現在,讓我們通過使用在 Logto 中具有 group:editors
角色的用戶進行登錄來測試角色映射功能。登錄後,檢查用戶在 WordPress 中的角色,以確保映射運行正常。
結論
通過將 Logto 與 WordPress 整合進行身份驗證和授權,你可以增強站點的安全性和功能。請記住,儘管此處提供的代碼是一個基本示例,你可能需要根據 WordPress 網站的角色和權限結構對其進行調整。