<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è)開(kāi)源的論壇軟件.網(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)限全開(kāi),否,則然后判斷其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

    主站蜘蛛池模板: h视频在线免费观看| 自拍偷自拍亚洲精品偷一| 大妹子影视剧在线观看全集免费| 97在线观看永久免费视频| 最近高清国语中文在线观看免费| 亚洲一区中文字幕久久| a级在线免费观看| 国产亚洲av片在线观看播放| 好猛好深好爽好硬免费视频| 91麻豆国产自产在线观看亚洲| 一区二区视频在线免费观看| 亚洲国产一区视频| 国产成人高清精品免费观看| 亚洲一区无码中文字幕| a毛片免费在线观看| 图图资源网亚洲综合网站| 97青青草原国产免费观看| 亚洲AV伊人久久青青草原| 一个人看的www免费在线视频| 国产亚洲精品资在线| 国产色无码精品视频免费| 亚洲AV无码专区国产乱码电影 | 免费看男女下面日出水视频| 性色av极品无码专区亚洲| 亚洲成a人片在线观看久| 两个人看的www免费视频| 亚洲精品国产成人片| 亚洲黄色片免费看| 亚洲日韩精品无码专区加勒比| 成人亚洲综合天堂| 日韩精品无码免费专区午夜| 亚洲成人福利在线| 国产精品二区三区免费播放心| 亚洲AV无码一区二区三区在线| 毛片高清视频在线看免费观看| 日亚毛片免费乱码不卡一区 | 五月天婷婷精品免费视频| 亚洲AV午夜福利精品一区二区| 两个人的视频高清在线观看免费| 免费无码婬片aaa直播表情| 亚洲AV无码专区电影在线观看|