角色型存取控制 (Role-based access control)
角色型存取控制 (RBAC, Role-based access control) 是一種根據使用者的角色分配權限的方法。在以下情境中考慮使用 RBAC:
- 你有多位使用者且存取需求不同:當使用者需要根據角色(如管理員、編輯者或檢視者)獲得不同權限時,RBAC 是理想的選擇。
- 你需要簡化權限管理:透過分配角色而非逐一設定權限,能有效管理大量使用者群組。
- 你的應用程式服務於不同部門或團隊:在不同群組需要不同資源存取層級的情境中,RBAC 很有用。
瞭解角色型存取控制的運作方式
權限 (Scopes)
權限指的是存取 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 權限。
角色
角色是 權限的集合,可以分配給使用者。它們還提供了一種聚合不同 API 定義的權限的方法,使得新增、移除或調整權限比逐一分配給使用者更有效率。
以下是一個 order_admin
角色的例子,包含兩個資源的多個權限:

角色之間的權限重疊是可以接受的。
瞭解如何在 Logto 中 配置角色。
範例:線上書店
假設你有一個線上書店需要管理。這裡我們大幅簡化存取控制模型以便演示。
該模型分為兩個主要的 API 資源:訂單和產品。它們有不同的資源標示符如下:
- 訂單:
https://api.store.io/orders
- 產品:
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
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
,而使用者最終持有的權限是他們被分配的所有角色的權限的聯集。
相關資源
精通 Logto 中的 RBAC:全面的實際範例CIAM 102:授權 (Authorization) 與角色型存取控制 (RBAC)