在昨天(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,基於屬性的存取控制)。
那麼今天就分享到這裡,我們明天見!