mvnforum權限系統分析
?? mvnforum是一個開源的論壇軟件.網址如下:
http://sourceforge.net/projects/mvnforum/
?? 本文主要研究它的權限部分,以作為使用借鑒.
?? 這里有篇中文的文檔,以作參考:
? http://www.cn-java.com/target/news.php?news_id=3298
權限部分的UML圖如下:
??
數據流程:
1,系統從OnlineUserManager這個入口進入.這個部件有個Map用來存儲當前的非過期用戶。OnlineUserManager會先根據當前時間和最后一個用戶的請求時間做對比,檢查是否有刷新過期用戶的必要,如果超過所設置的時間,那么先更新Map。然后OnlineUserManager根據提供的用戶的 sessionid和username在這個Map中查找。如果找到,則刷新該用戶的最后一次訪問時間;否則,OnlineUserManager調用OnlineUserFactory部件創建該OnlineUser,并把這個OnlineUser存入Map之中。
判對用戶是否過期的原理是:從OnlineUser的OnlineUserAction中取出最后一次的訪問時間和當前時間做對比.
2,OnlineUserFactory負責創建OnlineUser并為該OnlineUser提供完整的權限信息.OnlineUser包括3大部分信息,一部分是用戶的基本信息,一部分是用戶的權限信息,一部分是用戶的在線信息.在線信息由OnlineUserManager負責管理,其他2部分信息由OnlineUserFactory從持久層獲得.
獲得權限信息并把它設置到OnlineUser部件上,提供給OnlineUserManager管理.
3.CNMPermissionFactory類似我們常說的service.主要負責和持久層通信,最終返回一個CNMPermission部件供OnlineUserFactory合成OnlineUser部件.在下面的章節里,筆者會對他細化討論.
權限結構:
用來實現用戶權限的主要的是CNMPermission接口和他是2個子類AbstractPermission和CNMPermissionImpl.CNMPermission接口負責定義權限有關的常量和對外API.AbstractPermission設置了保存權限信息的變量并實現了CNMPermission接口中定義的抽象方法,因此,筆者把這個抽象類叫做鑒權類.CNMPermissionImpl 則負責對AbstractPermission使用的變量進行設值,因此,筆者稱之為賦權類.
先看看AbstractPermission的結構。這里涉及到這么幾個概念:全局權限,特定權限,單個權限,組合權限。
全局權限用true/false來設置。
特定權限是指某一個動作所作用的不同的對象。比如:某用戶只能將寫操作作用于1,2,4這3個論壇板塊之上。表示為這個特定權限內部的ArrayList容器中只有1,2,4三個編號。
單個權限是指單個動作。比如讀操作。
組合權限是為了方便設置提供的對單個權限的組合。比如對某用戶一次設置某板塊的“讀”和“發布”2種權限。
前2種權限是一個緯度的劃分,后2個是另一個緯度的劃分。
如何鑒權?
鑒權的接口都會在CNMPermission中定義。對全局權限,直接返回對應的標志位的值,對于特定權限,則先判斷是否特定權限全開,否,則然后判斷其ArrayList中是否包含對應的對象編號。
如何賦權?
這里要承接到上述數據流程的第三步。由CNMPermissionFactory根據一定先后循序(其實無關順序,因為采用的為真覆蓋原則,即持久層返回的權限都是真值,后面的真值對前面的真值可覆蓋)從持久層獲得所有的全局權限和特定權限。mvnforum只有用戶和角色2種概念(當然也可以擴展),因此它的順序是:用戶全局全縣-〉用戶特定權限-〉角色全局全縣-〉角色特定權限。當然無論哪一部都是對同一個CNMPermission進行操作。
無論在設置全局權限還是特定權限的時候都可能會遇到所定義的組合權限。具體的組合權限拆分是由CNMPermissionImpl來做的.
相關的表結構:
?? member表,存貯用戶基本信息。
?? membergroup ,存儲用戶和組(角色)的對應關系。
?? groups表,存儲組/角色的基本信息
?? grouppermission,存儲組/角色的全局權限,字段為groupid permissionid
?? groupforum,存儲組/角色 的論壇權限, 字段為groupid ,forum,permissionid
?? memberpermission 存貯用戶的全局權限,字段為 memberid permissionid
?? memberforum 存貯用戶的論壇權限,字段為memberid ,forum,permissionid
? 修改于2006/12/16? 晚8時
posted on 2006-09-19 10:07 binge 閱讀(1548) 評論(0) 編輯 收藏 所屬分類: OPEN SOURCE