掌握 Logto 中的 RBAC:一個全面的實際例子
本文提供了一個全面指南,通過一個線上書店的實例,深入探討如何在 Logto 中掌握基於角色的訪問控制(RBAC),探索關鍵的用戶角色、範疇,以及在前端和後端應用中整合 Logto 的 RBAC 功能,以提升安全性和訪問控制。
簡介
訪問控制和安全性是現代應用程序的重要方面,確保用戶獲得適當的資源訪問權限。Logto 的基於角色的訪問控制(RBAC)為開發人員提供了一種有效的方式來管理應用程序中的訪問控制和安全性。在本文中,我們將通過一個現實世界的例子探索 Logto RBAC 的強大功能,幫助你理解並將這些概念應用到你的項目中。
通過分析前端和後端代碼片段,你將獲得將 Logto 的 RBAC 集成到你的應用程序堆棧中的全面視角。到本文結尾,你將能夠充分利用 Logto 的 RBAC 功能來增強你的項目的安全性和訪問控制。
引入 BookHarber:一個線上書店的使用案例
為了有效展示 Logto 的 RBAC 功能,我們將使用一個線上書店的實例:BookHarber。BookHarber 為客戶和員工提供了一系列功能,確保流暢且安全的購物體驗。
BookHarber 的主要功能包括:
- 瀏覽和購買書籍:用戶可以輕鬆搜索和購買來自不同類型和作者的書 籍。
- 訂單管理和物流跟蹤:註冊客戶可以管理訂單、跟蹤配送並獲得購買更新。
- 特別優惠和節日活動:BookHarber 在特別活動和節日期間提供獨家折扣和促銷活動,以吸引並回饋其客戶群。
- 客戶支持:客戶可以開啟支持票據以解決任何問題,並獲得 BookHarber 員工的及時協助。
- 客戶管理:擁有不同角色的員工可以管理平台的各個方面,例如客戶帳戶、訂單處理和問題解決。
角色
在 BookHarber 生態系統中,我們可以識別幾個關鍵用戶角色,例如:
- 訪客:未註冊的用戶可以瀏覽網站、搜索書籍和查看特別優惠。
- 客戶:已註冊的用戶可以購買書籍、管理訂單、跟蹤物流和開啟支持票據。
- 店鋪管理員:負責監督平台整體管理和運營的員工,擁有完整访问權限。
- 圖書管理員:負責書籍和類別管理的員工。
- 客戶服務專員:負責回复支持票據的員工。
- 第三方物流供應商:負責管理和跟蹤訂單配送的外部合作夥伴。
- 市場營銷員:負責推廣 BookHarber,負責管理特別優惠和活動的員工。
設計 BookHarber REST API 的範疇
為了有效實施 Logto 的 RBAC 系統,我們需要設計與各種 REST API 對應的範疇。範疇是定義特定角色對每個 API 接口的訪問級別的許可。通過將適當的範疇分配給每個用戶角色,我們可以確保用戶僅能訪問與其角色相關的操作和資源。
讓我們為以下 REST API 設計範疇:
- 類別 API:
create:categories
: POST /categorieswrite:categories
: PUT /categories/:iddelete:categories
: DELETE /categories/:idlist:categories
: GET /categories
- 書籍 API:
create:books
: POST /bookswrite:books
: PUT /books/:iddelete:books
: DELETE /books/:idlist:books
: GET /booksread:books
: GET /books/:id
- 客戶 API:
list:customers
: GET /customerswrite:customers
: PUT /customers/:iddelete:customers
: DELETE /customers/:idread:customers
: GET /customers/:id
- 訂單 API:
create:orders
: POST /orderslist:orders
: GET /ordersread:orders
: GET /orders/:idwrite:orders
: PUT /orders/:id
- 活動 API:
create:events
: POST /eventswrite:events
: PUT /events/:idlist:events
: GET /eventsdelete:events
: DELETE /events/:id
- 訂單跟蹤 API:
read:orderTracks
: GET /orders/:id/trackscreate:orderTracks
: POST /orders/:id/trackswrite:orderTracks
: PUT /orders/:id/tracks/:trackId
- 票據 API:
create:tickets
: POST /ticketslist:tickets
: GET /ticketsread:tickets
: GET /tickets/:idwrite:tickets
: PUT /tickets/:id
將範疇分配給角色
現在我們已經為每個 REST API 定義了適當的範疇,我們可以將這些範疇分配給 BookHarber 生態系統中的相關用戶角色:
範疇 | 訪客 | 客戶 | 店鋪管理員 | 圖書管理員 | 客戶服務專員 | 第三方物流供應商 | 市場營銷員 |
---|---|---|---|---|---|---|---|
create:categories | ✓ | ✓ | |||||
write:categories | ✓ | ✓ | |||||
delete:categories | ✓ | ✓ | |||||
list:categories | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
create:books | ✓ | ✓ | |||||
write:books | ✓ | ✓ | |||||
delete:books | ✓ | ✓ | |||||
list:books | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
read:books | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
list:customers | ✓ | ✓ | |||||
write:customers | ✓ | ||||||
delete:customers | ✓ | ||||||
read:customers | ✓ | ✓ | |||||
create:orders | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
list:orders | ✓ | ||||||
read:orders | ✓ | ✓ | |||||
write:orders | ✓ | ||||||
create:events | ✓ | ✓ | |||||
write:events | ✓ | ✓ | |||||
list:events | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
delete:events | ✓ | ✓ | |||||
read:orderTracks | ✓ | ✓ | ✓ | ||||
create:orderTracks | ✓ | ✓ | |||||
write:orderTracks | ✓ | ✓ | |||||
create:tickets | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
list:tickets | ✓ | ✓ | |||||
read:tickets | ✓ | ✓ | |||||
write:tickets | ✓ | ✓ |
理解 "list" 和 "read" 範疇之間的區別
為了進一步說明在 REST API 設計和 RBAC 中的 "list" 和 "read" 範疇之間的差異,讓我們考慮一個涉及線上書店 BookHarber 的實際示例。
假設 BookHarber 有兩類用戶:客戶和客戶服務專員。客戶可以創建訂單,而客戶服務專員則負責幫助客戶處理他們的訂單。讓我們看看在此場景中如何應用 orders
API 資源的 "list" 和 "read" 範疇。
- List 範疇:"list" 範疇允許用戶訪問系統中的實體集合。例如,
list:orders
範疇允許用戶檢索所有可用訂單的列表。在 BookHarber 中,這個範疇對於需要系統中所有訂單概覽的店鋪管理員或其他員工很有用。然而,客戶服務專員不應能夠訪問整個訂單列表,因為他們的角色是幫助個別客戶處理具體的訂單。 - Read 範疇:"read" 範疇為用戶提供訪問具有給定 ID 的單一實體的權限。例如,
read:orders
範疇允許用戶通過其 ID 查看特定訂單的詳細信息。對於 BookHarber 的情況,這個範疇非常適合需要訪問特定客戶訂單信息的客戶服務專員。當客戶開啟支持票據時,客戶服務專員可以使用票據中提供的訂單 ID 訪問並查看該特定訂單的詳情。