角色型存取控制 (Role-based access control)
角色型存取控制 (RBAC, Role-based access control) 是一種根據使用者所屬角色分配權限的方法。建議在以下情境中考慮使用 RBAC:
- 你有多位使用者且存取需求不同:當使用者需依據角色(如管理員、編輯者、檢視者)獲得不同權限時,RBAC 是理想選擇。
- 你需要簡化權限管理:對大量使用者進行管理時,透過分配角色而非逐一設定權限更有效率。
- 你的應用服務於不同部門或團隊:當不同群組需要對資源有不同存取層級時,RBAC 特別實用。
瞭解角色型存取控制的運作方式
權限 (Permissions/Scopes)
權限 (Permission) 指的是存取 API 資源 (API resource) 的授權。在現實世界中,像訂單、商品、文件等實體都可以被指定為資源,並可分配各種操作權限。
權限範例,包括編輯訂單、閱讀文件、刪除商品等如下:
write:orders
read:documents
delete:products

上圖顯示,資源 https://api-1.store.io
中的權限 read:item
與資源 https://api-2.store.io
中的權限 read:item
是不同的。
若未指定 API 資源,權限將被視為「用於 OIDC」。通常這不是你在 RBAC 中想要的行為。
瞭解如何在 Logto 設定 API 權限。
角色 (Roles)
角色 (Role) 是 權限的集合,可分配給使用者。角色也能聚合不同 API 定義的權限,讓新增、移除或調整權限比逐一分配給使用者更有效率。
以下是一個 order_admin
角色,擁有兩個資源的多個權限:

不同角色之間的權限可以重疊,這是沒問題的。
瞭解如何在 Logto 設定角色。
範例:線上書店
假設你要管理一個線上書店。這裡我們大幅簡化存取控制模型以便說明。
模型分為兩個主要 API 資源:orders(訂單)與 products(商品)。它們的資源標示符如下:
- Orders:
https://api.store.io/orders
- Products:
https://api.store.io/products
對每個資源,你希望將權限分為讀取、寫入與刪除,因此總共定義六個權限:
https://api.store.io/orders
- 權限
read:order
- 權限
write:order
- 權限
delete:order
- 權限
https://api.store.io/products
- 權限
read:product
- 權限
write:product
- 權限
delete:product
- 權限
以下為此模型的示意圖:

你希望有兩種管理員:訂單管理員與商品管理員:
- 訂單管理員 (Order admin) 可以管理訂單並檢視商品(因訂單包含商品),但不能管理商品。
- 商品管理員 (Product admin) 可以管理商品,且不應接觸任何訂單資訊。
因此你建立兩個角色,order_admin
與 product_admin
,並分配如下權限:
order_admin
https://api.store.io/orders
read:order
、write:order
、delete:order
https://api.store.io/products
read:product
product_admin
https://api.store.io/products
read:product
、write:product
、delete:product
以下為這兩個角色的示意圖:

你可以同時將 order_admin
與 product_admin
分配給同一位使用者,這樣他就會擁有你剛定義的全部六個權限。
請注意,訂單管理員與商品管理員共享 read:product
權限,而使用者最終擁有的權限是其所有角色權限的聯集。
相關資源
RBAC 實務:逐步實作安全授權 (Authorization) 的指南
精通 Logto RBAC:完整真實案例解析CIAM 102:授權 (Authorization) 與角色型存取控制 (RBAC)