與 WordPress 授權整合
系列的第二部分,介紹如何將 Logto 與 WordPress 整合,重點是授權過程。
在之前的文章中,我們討論了如何在 WordPress 中整合 Logto 進行身份驗證。本文作為第二部分,將深入探討授權過程,重點介紹 WordPress 中的角色系統及如何實現與 Logto 的角色映射,由於我們在上一篇文章中使用的插件並未直接提供授權功能。
我們將創建一個角色映射功能,基於 Logto RBAC(基於角色的訪問控制)提供的角色,自動為用戶分配 WordPress 角色。
了解 WordPress 用戶角色
WordPress 有一個內建的用戶角色管理系統,用於定義用戶可以在網站上執行的操作(功能)。默認的用戶角色包括管理員、編輯、作者、貢獻者和訂閱者,每個角色都有自己的一套功能。
這些角色對於維護網站操作的安全性和效率至關重要,因為它們有助於確保用戶根據其職責擁有適當的訪問級別。
解決方案:自定義角色映射
Logto 採用基於角色的訪問控制(RBAC)作為其授權模型,使用“範圍”作為權限的最小單元。這些範圍定義了已身份驗證的用戶在應用程序中允許執行的特定操作。然而,WordPress 在管理用戶權限時則依賴於預定義 的“角色”,這些角色將各種功能捆綁在一起。
鑑於此基本區別,我們建議在 Logto 中創建特殊角色,這些角色對應於 WordPress 中定義的角色。這些角色可能沒有任何範圍,它們僅用作將用戶映射到 WordPress 角色的參考。
先決條件
在繼續之前,請確保你已經完成以下步驟:
- 完成上一篇文章,講述如何將 Logto 與 WordPress 整合進行身份驗證,這包括:
- 一個具有管理員訪問權限的 WordPress 網站。
- 一個 Logto 賬戶,設置了適用於你 WordPress 網站的應用程序。
- 在你的 WordPress 網站上安裝並配置了 OpenID Connect Generic 插件。
- 在 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 網站的角色和權限結構進行調整。