跳至主要內容

角色型存取控制 (Role-based access control)

角色型存取控制 (RBAC, Role-based access control) 是一種根據使用者所屬角色分配權限的方法。建議在以下情境中考慮使用 RBAC:

  • 你有多位使用者且存取需求不同:當使用者需依據角色(如管理員、編輯者、檢視者)獲得不同權限時,RBAC 是理想選擇。
  • 你需要簡化權限管理:對大量使用者進行管理時,透過分配角色而非逐一設定權限更有效率。
  • 你的應用服務於不同部門或團隊:當不同群組需要對資源有不同存取層級時,RBAC 特別實用。

瞭解角色型存取控制的運作方式

權限 (Permissions/Scopes)

權限 (Permission) 指的是存取 API 資源 (API resource) 的授權。在現實世界中,像訂單、商品、文件等實體都可以被指定為資源,並可分配各種操作權限。

權限範例,包括編輯訂單、閱讀文件、刪除商品等如下:

  • write:orders
  • read:documents
  • delete:products
Permissions

上圖顯示,資源 https://api-1.store.io 中的權限 read:item 與資源 https://api-2.store.io 中的權限 read:item 是不同的。

若未指定 API 資源,權限將被視為「用於 OIDC」。通常這不是你在 RBAC 中想要的行為。

瞭解如何在 Logto 設定 API 權限

角色 (Roles)

角色 (Role) 是 權限的集合,可分配給使用者。角色也能聚合不同 API 定義的權限,讓新增、移除或調整權限比逐一分配給使用者更有效率。

以下是一個 order_admin 角色,擁有兩個資源的多個權限:

Order Admin Role

不同角色之間的權限可以重疊,這是沒問題的。

瞭解如何在 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

以下為此模型的示意圖:

Bookstore API and Permissions

你希望有兩種管理員:訂單管理員與商品管理員:

  • 訂單管理員 (Order admin) 可以管理訂單並檢視商品(因訂單包含商品),但不能管理商品。
  • 商品管理員 (Product admin) 可以管理商品,且不應接觸任何訂單資訊。

因此你建立兩個角色,order_adminproduct_admin,並分配如下權限:

  • order_admin
    • https://api.store.io/orders
      • read:orderwrite:orderdelete:order
    • https://api.store.io/products
      • read:product
  • product_admin
    • https://api.store.io/products
      • read:productwrite:productdelete:product

以下為這兩個角色的示意圖:

Bookstore Roles

你可以同時將 order_adminproduct_admin 分配給同一位使用者,這樣他就會擁有你剛定義的全部六個權限。

請注意,訂單管理員與商品管理員共享 read:product 權限,而使用者最終擁有的權限是其所有角色權限的聯集。

RBAC 實務:逐步實作安全授權 (Authorization) 的指南

精通 Logto RBAC:完整真實案例解析

CIAM 102:授權 (Authorization) 與角色型存取控制 (RBAC)