爲什麼需要權限管理?
- 安全性:防止誤操作、人爲破壞、數據泄露。
- 數據隔離:不同的權限能看到的以及操作的數據不同
- 明確職責:不同的角色所做的操作和所看到的數據不同
權限管理的核心是什麼?
- 用戶-權限:
人員少,功能固定,或者特別簡單的系統。比如 MySQL 就是屬於這種權限管理模式 - RBAC(Role-Based Access Control):
基於角色的權限訪問控制。在 RBAC 中權限與角色相關聯,用戶綁定所對應的角色從而得到這些角色的權限,這種關聯簡化了權限的管理。
在一個組織中,角色是爲了完成某種工作而創造出來的,用戶則依據他的責任和資格賦予相應的角色。並且,用戶也可以很容易的從 A 角色切換成 B 角色。角色可以根據新的需求和系統的合併來賦予新的權限。權限也可以從某個角色中回收。
RBAC 模型主要關注於 角色-用戶-權限之間的關係,角色和用戶是多對多的關係,角色和權限是多對多的關係。
如果現實中,有很多人都有相同的權限,RBAC 可以拓展出 group 這個概念的,group 是可以解決多角色相同權限的問題,比如:A 部門的資料,只能 A 部門的人員看,那麼用戶的賬號就直接賦予 A 部門這個角色組就好了。
RBAC 模型還支持著名的三大安全原則:最小權限原則、責任分離原則、數據抽象原則。
理想中的權限管理?
- 實現角色級的權限管理:
角色級的權限管理都是基於 RBAC 模型實現的。這種模型幾乎能覆蓋所有場景,同時能夠滿足需求的不斷變化,許多臨時的調整也能很好的應對。基於 RBAC 的權限的管理,很好的完成了對權限的抽象,只需要根據不同的場景進行不同的實現就好。相對於直接對用戶綁定權限,RBAC 可以對用戶進行更好的擴展。 - 可實現功能級、數據級權限:
功能級權限就是功能權限管理技術,一般就使用 RBAC 權限管理模型。功能級權限管理系統會提供如下功能:
1、角色管理系統由用戶定義角色賦予權限;
2、用戶角色管理界面,由用戶給系統用戶賦予角色;
3、支持用戶定義權限。
目前數據級權限管理沒有統一的技術,大體上採用的是如下技術:
1、硬編碼,這種情況居多,但是弊端非常顯然,耦合性高,不易測試,不易維護;
2、使用規則引擎,有一些企業將這種邏輯用規則的形式體現出來。這可以解決很多問題,但是規則引擎並不是專業用於權限管理,所以對於一些複雜的權限管理就顯得力不從心了;
3、使用第三方專業軟件。 - 簡單易操作,能夠實現各種需求:
所有涉及到權限相關的都能有相關的頁面可操作,同時能提供一個頁面能查詢到一個用戶當前的權限列表。需要的頁面如下:
1、權限管理界面;
2、角色管理界面;
3、用戶管理界面;
4、角色和權限關係維護界面;
5、用戶和角色關係維護界面。
開源的權限管理項目
- Spring Security:
是一個能夠爲基於 Spring 的企業應用系統,提供聲明式的安全控制解決方案的安全框架。
它提供了一組可以在 Spring 應用上下文配置的 Bean,充分利用了 Spring 控制反轉、依賴注入和麪向切面編程功能。對已有系統提供聲明式的安全訪問控制功能,減少了爲企業系統安全控制編寫大量重複代碼的工作。 - Apache Shiro:
Shiro 是一個強大且易用的 Java 安全框架,執行身份驗證、授權、密碼學和會話管理。Shiro 有易於理解的 API。