凡涉及用戶的系統皆需權限管理,核心目標:按安全策略控制用戶僅訪問被授權資源(菜單、頁面、API、按鈕等)。包含兩大模塊:

常見驗證方式:

| 表名 | 核心字段 | 說明 |
|---|---|---|
| subject (主體/用戶) | id, username, password | 系統訪問主體 |
| permission (權限/資源) | id, name, resource_url | 可被授權的資源定義 |
| role (角色) | id, name | 權限載體,如「項目經理」「普通員工」 |
| role_permission | role_id, permission_id | 角色-權限多對多關聯 |
| subject_role | subject_id, role_id | 用戶-角色多對多關聯 |
註:資源表可合併至 permission 表,避免冗餘。
if (user.role == "pm") { /* 訪問 */ }
if (user.role != "pm") { /* 禁止 */ }
缺點:權限變更需改代碼、角色爆炸、難維護。
if (user.hasPermission("project:create")) { /* 訪問 */ }
else if (user.hasPermission("admin:*")) { /* 訪問 */ }
優勢:權限配置化、無需改代碼、細粒度控制、支持動態授權。
以 Spring MVC 攔截器為例:
後續將深入 Shiro 實戰:Realm 實現、權限註解、標簽庫、Session 管理、RememberMe、OAuth2 整合等。