一 、簡介
權限管理對有組織結構的系統重要性無需多言,沒有權限限制的管理、辦公系統将沒有可用性可談。說實話權限管理系統實作起來沒有任何門檻,直接幾個if else判斷就能解決現實需求 ,但是,如果需要靈活、健壯、可維護、可擴充達,使整個開發組滿意的的權限管理系統,那就另當别論了。
那麼我們來看下權限實作的基本方式:代碼中固定權限代碼(A),對這段代碼名一個代号,然後在系統中建一個(權限/角色),最後把代碼(A)對應的代号關聯到(權限/角色),這樣把系統使用者關聯(權限/角色)就實作了系統權限的管理。也許你碰到過更為複雜的權限管理系統,但基本上都是這樣實作方式的變體或添加了不同權限限制次元。
在這個文章中,我們将介紹主流權限系統Apache Shiro及Spring Security的實作方式,并在第四節詳細介紹bg.work系統權限實作細節和他的獨到之處。
二、Apache Shiro
Apache Shiro 不僅包含了權限管理(授權部分),也包含授權/加密/回話管理/驗證資料基礎接入等功能子產品,在這裡我們主要介紹權限管理功能子產品
首先我們看下他的整體結構圖:
流程簡介:
- 業務代碼(最上層的各種語言實作)通過登入頁面登入系統
- 登入成功,Apache shiro根據配置配置設定給操作一個 subject執行個體,這個subject執行個體通過realms加載授權資料(連接配接授權/内部操作辨別)
- 操作者通路不同URL,受到subject加載的 授權連結比對限制
- 操作者删除或添加資料,則受到subject加載的内部操作辨別限制
- 通過這些操作限制組合就能有效管理操作者的行為
- 具體實作代碼就不在這裡COPY了
三、Spring Security
Spring Security 是Spring 官方支援的權限管理功能,基本功能和Apache Shiro并無多少不同,實作的功能:認證,授權,甚至系統防護,首先我進也來一張實作構圖
流程簡介:
- 操作登入系統,初始化
對象,通過UserDetailsService加載對應角色的權限與使用者資料填充Authentication
Principal 和grantedAuthoritiesAuthentication的
- 當通路一個需要權限的連結時,把連結需要的權限屬性和操作者的
AccessDecisionManager決定是否有權通路Authentication交給
- 當CREATE或者DELETE一個資料對象時,把本次操作需要的權限屬性和操作者的
Authentication交給AccessDecisiionManager判斷權限
-
整個過程和Apache Shiro功能相差無幾
四、bg.work 權限管理實作
在簡要了解了Apache Shiro 和 Spring Secrity功能後,我們将詳細說明bg.work辦公架構的實作細節。bg.work的權限系統與本系統的資料與界面實作方式有着緊密的聯系,是以在介紹權限系統前,我們要先介紹下資料與界面功能。
1、資料操作:
bg.work在資料層設計了Model ORM,基本結構如下:
//model對應資料庫的表,基于model orm 實作,model字段可以動态讀取,利用這一原則與權限系統結合,可以動态設定針對model資料控制
@Model("department", "部門")
class Department:ContextModel("corp_department",
"public") {
companion object : RefSingleton<Department> {
override lateinit var ref: Department
}
val id= ModelField(null,
"id",
FieldType.BIGINT,
"标示",
primaryKey = FieldPrimaryKey())
val name= ModelField(null,
"name",
FieldType.STRING,
"名稱")
val comment = ModelField(null,
"comment",
FieldType.TEXT,
"注釋")
}
2、界面定義
<!--基于model orm 架構,界面元素對應Model屬性名稱,基于這一原則,我們可以結合權限控制系統實作對界面的靈活控制-->
<view type="list">
<field name="id"/>
<field name="name" type="static"/>
<field name="comment" type="static"/>
</view>
對應界面:
3、bg.work權限系統架構結構
說明:
Access Model Rule 控制Model(資料表)
read:是否有權操作、讀取字段設定、讀取哪個使用者資料、限制到什麼部門、限制到個人/整個組織、限制到目标角色、附加條件等
delete:是否有權操作、删除哪個使用者資料、限制到什麼部門、限制到個人/整個組織、限制到目标角色、附加條件等
edit:是否有權操作、更新字段設定、更新哪個使用者資料、限制到什麼部門、限制到個人/整個組織、限制到目标角色、附加條件等
create:是否有權操作、添加字段設定
設定界面:
Model UI Rule 對Model View 的限制
針對 model view 要展示的字段及操作按鈕限制,每種 model都有對應的View Type
設定界面如下:
App menu控制,也是針對管理系統的菜單進行控制:
五、總結
bg.work權限系統的加入,對後續功能的加入實作了直接控制,同時也實作了加入功能時不再考慮權限問題,所有的權限設定都推遲到系統部署或定制階段
附加:
bg.work 源碼連接配接:鼓勵請點贊
github:https://github.com/ouliuying/bgserver
gitee:https://gitee.com/ouliuying/bgserver