<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    拾貝殼

    走過(guò)的路
    隨筆 - 39, 文章 - 1, 評(píng)論 - 14, 引用 - 0
    數(shù)據(jù)加載中……

    mvnforum權(quán)限系統(tǒng)分析

    ?? mvnforum是一個(gè)開源的論壇軟件.網(wǎng)址如下:
    http://sourceforge.net/projects/mvnforum/
    ?? 本文主要研究它的權(quán)限部分,以作為使用借鑒.
    ?? 這里有篇中文的文檔,以作參考:
    ? http://www.cn-java.com/target/news.php?news_id=3298


    權(quán)限部分的UML圖如下:
    ??

    數(shù)據(jù)流程:
    1,系統(tǒng)從OnlineUserManager這個(gè)入口進(jìn)入.這個(gè)部件有個(gè)Map用來(lái)存儲(chǔ)當(dāng)前的非過(guò)期用戶。OnlineUserManager會(huì)先根據(jù)當(dāng)前時(shí)間和最后一個(gè)用戶的請(qǐng)求時(shí)間做對(duì)比,檢查是否有刷新過(guò)期用戶的必要,如果超過(guò)所設(shè)置的時(shí)間,那么先更新Map。然后OnlineUserManager根據(jù)提供的用戶的 sessionid和username在這個(gè)Map中查找。如果找到,則刷新該用戶的最后一次訪問(wèn)時(shí)間;否則,OnlineUserManager調(diào)用OnlineUserFactory部件創(chuàng)建該OnlineUser,并把這個(gè)OnlineUser存入Map之中。
    判對(duì)用戶是否過(guò)期的原理是:從OnlineUser的OnlineUserAction中取出最后一次的訪問(wèn)時(shí)間和當(dāng)前時(shí)間做對(duì)比.
    2,OnlineUserFactory負(fù)責(zé)創(chuàng)建OnlineUser并為該OnlineUser提供完整的權(quán)限信息.OnlineUser包括3大部分信息,一部分是用戶的基本信息,一部分是用戶的權(quán)限信息,一部分是用戶的在線信息.在線信息由OnlineUserManager負(fù)責(zé)管理,其他2部分信息由OnlineUserFactory從持久層獲得.
    獲得權(quán)限信息并把它設(shè)置到OnlineUser部件上,提供給OnlineUserManager管理.
    3.CNMPermissionFactory類似我們常說(shuō)的service.主要負(fù)責(zé)和持久層通信,最終返回一個(gè)CNMPermission部件供OnlineUserFactory合成OnlineUser部件.在下面的章節(jié)里,筆者會(huì)對(duì)他細(xì)化討論.
    權(quán)限結(jié)構(gòu):
    用來(lái)實(shí)現(xiàn)用戶權(quán)限的主要的是CNMPermission接口和他是2個(gè)子類AbstractPermission和CNMPermissionImpl.CNMPermission接口負(fù)責(zé)定義權(quán)限有關(guān)的常量和對(duì)外API.AbstractPermission設(shè)置了保存權(quán)限信息的變量并實(shí)現(xiàn)了CNMPermission接口中定義的抽象方法,因此,筆者把這個(gè)抽象類叫做鑒權(quán)類.CNMPermissionImpl 則負(fù)責(zé)對(duì)AbstractPermission使用的變量進(jìn)行設(shè)值,因此,筆者稱之為賦權(quán)類.
    先看看AbstractPermission的結(jié)構(gòu)。這里涉及到這么幾個(gè)概念:全局權(quán)限,特定權(quán)限,單個(gè)權(quán)限,組合權(quán)限。
    全局權(quán)限用true/false來(lái)設(shè)置。
    特定權(quán)限是指某一個(gè)動(dòng)作所作用的不同的對(duì)象。比如:某用戶只能將寫操作作用于1,2,4這3個(gè)論壇板塊之上。表示為這個(gè)特定權(quán)限內(nèi)部的ArrayList容器中只有1,2,4三個(gè)編號(hào)。
    單個(gè)權(quán)限是指單個(gè)動(dòng)作。比如讀操作。
    組合權(quán)限是為了方便設(shè)置提供的對(duì)單個(gè)權(quán)限的組合。比如對(duì)某用戶一次設(shè)置某板塊的“讀”和“發(fā)布”2種權(quán)限。
    前2種權(quán)限是一個(gè)緯度的劃分,后2個(gè)是另一個(gè)緯度的劃分。
    如何鑒權(quán)?
    鑒權(quán)的接口都會(huì)在CNMPermission中定義。對(duì)全局權(quán)限,直接返回對(duì)應(yīng)的標(biāo)志位的值,對(duì)于特定權(quán)限,則先判斷是否特定權(quán)限全開,否,則然后判斷其ArrayList中是否包含對(duì)應(yīng)的對(duì)象編號(hào)。
    如何賦權(quán)?
    這里要承接到上述數(shù)據(jù)流程的第三步。由CNMPermissionFactory根據(jù)一定先后循序(其實(shí)無(wú)關(guān)順序,因?yàn)椴捎玫臑檎娓采w原則,即持久層返回的權(quán)限都是真值,后面的真值對(duì)前面的真值可覆蓋)從持久層獲得所有的全局權(quán)限和特定權(quán)限。mvnforum只有用戶和角色2種概念(當(dāng)然也可以擴(kuò)展),因此它的順序是:用戶全局全縣-〉用戶特定權(quán)限-〉角色全局全縣-〉角色特定權(quán)限。當(dāng)然無(wú)論哪一部都是對(duì)同一個(gè)CNMPermission進(jìn)行操作。
    無(wú)論在設(shè)置全局權(quán)限還是特定權(quán)限的時(shí)候都可能會(huì)遇到所定義的組合權(quán)限。具體的組合權(quán)限拆分是由CNMPermissionImpl來(lái)做的.
    相關(guān)的表結(jié)構(gòu):
    ?? member表,存貯用戶基本信息。
    ?? membergroup ,存儲(chǔ)用戶和組(角色)的對(duì)應(yīng)關(guān)系。
    ?? groups表,存儲(chǔ)組/角色的基本信息
    ?? grouppermission,存儲(chǔ)組/角色的全局權(quán)限,字段為groupid permissionid
    ?? groupforum,存儲(chǔ)組/角色 的論壇權(quán)限, 字段為groupid ,forum,permissionid
    ?? memberpermission 存貯用戶的全局權(quán)限,字段為 memberid permissionid
    ?? memberforum 存貯用戶的論壇權(quán)限,字段為memberid ,forum,permissionid


    ? 修改于2006/12/16? 晚8時(shí)

    posted on 2006-09-19 10:07 binge 閱讀(1546) 評(píng)論(0)  編輯  收藏 所屬分類: OPEN SOURCE

    主站蜘蛛池模板: 亚洲免费视频网址| 亚洲国产精品一区二区第四页 | 亚洲手机中文字幕| 一区在线免费观看| 在线a毛片免费视频观看| 亚洲成AV人在线观看天堂无码| 亚洲第一成年免费网站| 97视频免费观看2区| 亚洲欧洲日产国码一级毛片| 亚洲男人天堂2022| 99久久久国产精品免费牛牛| 久久精品国产精品亚洲| 一区二区亚洲精品精华液| 久久成人a毛片免费观看网站| 亚洲福利精品电影在线观看| 亚洲午夜福利在线视频| 99久久免费中文字幕精品| 亚洲中文字幕无码久久精品1 | 手机永久免费的AV在线电影网| 免费无码AV电影在线观看| 亚洲男人天堂2017| 精品国产免费一区二区三区| 国产乱子伦精品免费无码专区 | a毛片全部播放免费视频完整18| 免费乱理伦在线播放| 亚洲性色AV日韩在线观看| 亚洲一区在线免费观看| 久久久影院亚洲精品| 国产一级a毛一级a看免费视频| mm1313亚洲国产精品美女| 亚洲AV日韩AV无码污污网站| 毛片免费在线观看网址| 亚洲人成网站看在线播放| 久久久久久毛片免费播放| 亚洲av无码不卡| 久久青草精品38国产免费| 亚洲精品无码精品mV在线观看| 国产成人无码精品久久久免费| 亚洲av再在线观看| 美女被艹免费视频| 亚洲av无码专区在线观看素人|