在昨天(Day 24)我們提到 Authorization(授權) 的基本概念,今天要更進一步介紹在實務中最常見的授權模型之一:RBAC(Role-Based Access Control,基於角色的存取控制)。
RBAC 的核心理念很簡單:
授權不是直接賦予使用者權限,而是先把權限分配給「角色」,再把角色指派給使用者。
這樣的做法就像公司組織一樣:
在 RBAC 中,通常會有三個關鍵實體:
ROLE_ADMIN
、ROLE_USER
。CREATE_ORDER
、DELETE_USER
。關聯方式:
ROLE_USER
就能立刻擁有基礎功能。Spring Security 原生就支援 RBAC 的概念:
角色表示法:
ROLE_ADMIN
、ROLE_USER
。.hasRole("ADMIN")
來檢查。權限表示法:
.hasAuthority("DELETE_ORDER")
來檢查更細的操作。典型場景:
http.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/reports/**").hasAnyRole("ADMIN", "MANAGER")
.requestMatchers("/user/**").hasRole("USER")
.anyRequest().authenticated()
);
假設一個電商系統:
ROLE_CUSTOMER
:下單、查詢訂單ROLE_SELLER
:新增商品、查看訂單ROLE_ADMIN
:管理所有使用者與商品ROLE_CUSTOMER
→ CREATE_ORDER
, READ_ORDER
ROLE_SELLER
→ CREATE_PRODUCT
, READ_ORDER
ROLE_ADMIN
→ DELETE_USER
, MANAGE_PRODUCT
, READ_ALL_ORDERS
RBAC 是企業系統中最常見的授權模型,簡單卻足夠應付大部分需求。在實務上會有更多已經成熟實作的RBAC工具,大家可以在網路上先去尋找。
但隨著系統複雜度提高,有時會需要更細緻的控制,例如 ABAC(Attribute-Based Access Control,基於屬性的存取控制)。
那麼今天就分享到這裡,我們明天見!