<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

    主站蜘蛛池模板: 久久久久一级精品亚洲国产成人综合AV区 | 国产成人人综合亚洲欧美丁香花 | 国产91免费在线观看| 亚洲va中文字幕无码久久 | 大学生一级毛片免费看| 亚洲综合色一区二区三区小说| 国产白丝无码免费视频| 亚洲国产女人aaa毛片在线| 久久久精品免费视频| 亚洲精品国产成人专区| 永久看日本大片免费35分钟| 亚洲最新永久在线观看| 青青青国产在线观看免费网站 | 免费的黄色的网站| 久久精品国产亚洲一区二区三区| 国产精品极品美女自在线观看免费 | 两性色午夜视频免费网| 久久青青草原亚洲AV无码麻豆| 精品无码无人网站免费视频 | 日韩免费无砖专区2020狼| 男女超爽视频免费播放| 亚洲中文字幕伊人久久无码| 三级黄色免费观看| 久久亚洲精品成人无码网站| 欧美a级成人网站免费| 国产成人亚洲综合无| 亚洲色欲色欲www在线丝| 亚洲黄色免费电影| 亚洲首页国产精品丝袜| 免费a级毛片永久免费| a毛片久久免费观看| 亚洲fuli在线观看| 亚洲VA综合VA国产产VA中| 中文无码成人免费视频在线观看| 亚洲校园春色小说| 亚洲av无码成人精品区| 99re热精品视频国产免费| 亚洲精品无码久久久久牙蜜区| 亚洲色成人网站WWW永久| 国产精品成人观看视频免费| 国产成人综合亚洲一区|