跳至主要內容

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

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

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

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

權限 (Scopes)

權限指的是存取 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 權限

角色

角色是 權限的集合,可以分配給使用者。它們還提供了一種聚合不同 API 定義的權限的方法,使得新增、移除或調整權限比逐一分配給使用者更有效率。

以下是一個 order_admin 角色的例子,包含兩個資源的多個權限:

Order Admin Role

角色之間的權限重疊是可以接受的。

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

以下是此模型的示意圖:

Bookstore API and Permissions

你希望有兩種類型的管理員,訂單管理員和產品管理員:

  • 訂單管理員 可以管理訂單並查看產品(因為訂單由產品組成),但不能管理產品。
  • 產品管理員 可以管理產品,但不應該知道任何訂單。

因此你創建了兩個角色,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,而使用者最終持有的權限是他們被分配的所有角色的權限的聯集。

精通 Logto 中的 RBAC:全面的實際範例

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