跳至主要內容

基於角色的存取控制 (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: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

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

Bookstore Roles

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

注意訂單管理員與產品管理員共享權限 read:product,而使用者最終持有的權限是他們被分配的所有角色的權限的聯集。

精通 Logto 中的 RBAC:一個全面的現實世界範例

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