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

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

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

    當(dāng)柳上原的風(fēng)吹向天際的時候...

    真正的快樂來源于創(chuàng)造

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
    系統(tǒng)需求

    在一個CMS系統(tǒng)中,用戶User可以通過接口IDocService向系統(tǒng)添加,刪除,更新各種文章Doc,現(xiàn)要求設(shè)計IDocService的一個實現(xiàn)類,這個類除了能完成接口指定的功能外,還要能實現(xiàn)權(quán)限控制。

    具體來說權(quán)限控制就是:用戶User擁有一個privilegePoint的屬性,它代表著用戶的權(quán)限大小,當(dāng)此值大于20時用戶能添加文章,大于40時能更新文章,大于60時能刪除文章。

    需要實現(xiàn)的IDocService接口如下:
    package com.heyang.traditonal.service;

    import com.heyang.traditonal.domain.Doc;
    import com.heyang.traditonal.domain.User;

    /**
     * DocService需要實現(xiàn)的接口
     * 
    @author 何楊(heyang78@gmail.com)
     *
     * 
    @since 2008-12-30 下午05:16:17
     * 
    @version 1.00
     
    */

    public interface IDocService{
        
    /**
         * 用戶user添加一個文檔doc
         * 
    @param doc
         * 
    @param user
         
    */

        
    public void add(Doc doc,User user);
        
        
    /**
         * 用戶user刪除一個文檔doc
         * 
    @param doc
         * 
    @param user
         
    */

        
    public void delete(Doc doc,User user);
        
        
    /**
         * 用戶user更新一個文檔doc
         * 
    @param doc
         * 
    @param user
         
    */

        
    public void update(Doc doc,User user);
    }


    權(quán)力限制的基本結(jié)構(gòu)
    對于這種簡單權(quán)限處理當(dāng)然不難,在執(zhí)行的方法中取得用戶權(quán)限再看它是否高于指定的權(quán)限即可,大于則執(zhí)行處理,小于等于則不予執(zhí)行。程序的基本結(jié)構(gòu)如下:

    public void XXAction(Doc doc, User user) {
      
    if(user.getPrivilegePoint()>執(zhí)行XXAction需要的權(quán)限值){
        
    // 執(zhí)行處理
      }

      
    else{
        
    // 權(quán)限不夠
      }

    }


    基本方法確定了,接口指定的三個函數(shù)也能很快寫就。考慮到將需要的權(quán)限值硬編碼在程序中不方便修改維護,特地使用Spring的IoC,在生成DocService示例時從配置文件中取出值注入進入。下面是最終實現(xiàn)IDocService實現(xiàn)類及其Spring配置文件:

    IDocService實現(xiàn)類

    package com.heyang.traditonal.service;

    import com.heyang.traditonal.domain.Doc;
    import com.heyang.traditonal.domain.User;

    /**
     * 為領(lǐng)域?qū)ο驞oc提供服務(wù)
     * 
    @author 何楊(heyang78@gmail.com)
     *
     * 
    @since 2008-12-30 下午05:13:29
     * 
    @version 1.00
     
    */

    public class DocService implements IDocService{
        
    // 添加doc需要的權(quán)限點
        private int addDocPrivilegePoint;
        
        
    // 刪除doc需要的權(quán)限點
        private int deleteDocPrivilegePoint;
        
        
    // 更新doc需要的權(quán)限點
        private int updateDocPrivilegePoint;
        
        
    public void add(Doc doc, User user) {
            
    if(user.getPrivilegePoint()>addDocPrivilegePoint){
                System.out.println(
    ""+doc+"交由dao處理(存入數(shù)據(jù)庫)");
            }
            
            
    else{
                System.out.println(
    "用戶權(quán)限必須達到"+addDocPrivilegePoint+"才能執(zhí)行添加操作");
            }

        }


        
    public void delete(Doc doc, User user) {
            
    if(user.getPrivilegePoint()>deleteDocPrivilegePoint){
                System.out.println(
    ""+doc+"交由dao處理(從數(shù)據(jù)庫刪除)");
            }

            
    else{
                System.out.println(
    "用戶權(quán)限必須達到"+deleteDocPrivilegePoint+"才能執(zhí)行刪除操作");
            }

        }


        
    public void update(Doc doc, User user) {
            
    if(user.getPrivilegePoint()>updateDocPrivilegePoint){
                System.out.println(
    ""+doc+"交由dao處理(更新數(shù)據(jù)庫中對應(yīng)的記錄)");
            }

            
    else{
                System.out.println(
    "用戶權(quán)限必須達到"+updateDocPrivilegePoint+"才能更新添加操作");
            }

        }


        
    public int getAddDocPrivilegePoint() {
            
    return addDocPrivilegePoint;
        }


        
    public void setAddDocPrivilegePoint(int addDocPrivilegePoint) {
            
    this.addDocPrivilegePoint = addDocPrivilegePoint;
        }


        
    public int getDeleteDocPrivilegePoint() {
            
    return deleteDocPrivilegePoint;
        }


        
    public void setDeleteDocPrivilegePoint(int deleteDocPrivilegePoint) {
            
    this.deleteDocPrivilegePoint = deleteDocPrivilegePoint;
        }


        
    public int getUpdateDocPrivilegePoint() {
            
    return updateDocPrivilegePoint;
        }


        
    public void setUpdateDocPrivilegePoint(int updateDocPrivilegePoint) {
            
    this.updateDocPrivilegePoint = updateDocPrivilegePoint;
        }
        
    }

    配置文件:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
        
    <bean id="docService" class="com.heyang.traditonal.service.DocService">
            
    <property name="addDocPrivilegePoint" value="20" />
            
    <property name="updateDocPrivilegePoint" value="40" />
            
    <property name="deleteDocPrivilegePoint" value="60" />        
        
    </bean>
    </beans>

    業(yè)務(wù)處理模擬過程,其中用戶權(quán)限只有50,能添加(>20)和修改文章(>40),不能刪除文章(>60):
    ApplicationContext ctx = new ClassPathXmlApplicationContext("traditonalCtx.xml");

    IDocService docService
    =(IDocService)ctx.getBean("docService");

    Doc doc
    =new Doc("論美國次貸危機的產(chǎn)生及影響");
    User user
    =new User("中科院經(jīng)濟所研究員",50);

    // 用戶向系統(tǒng)添加文章
    docService.add(doc, user);

    // 用戶向系統(tǒng)更新文章
    doc.setName("論美國次貸危機的產(chǎn)生及影響和我國應(yīng)該采取的應(yīng)對措施");
    docService.update(doc, user);

    // 用戶從系統(tǒng)撒刪除文章
    docService.delete(doc, user);

    模擬過程的輸出
    將文件 名=論美國次貸危機的產(chǎn)生及影響交由dao處理(存入數(shù)據(jù)庫)
    將文件 名
    =論美國次貸危機的產(chǎn)生及影響和我國應(yīng)該采取的應(yīng)對措施交由dao處理(更新數(shù)據(jù)庫中對應(yīng)的記錄)
    用戶權(quán)限必須達到60才能執(zhí)行刪除操作

    小結(jié)
    至此,權(quán)限子系統(tǒng)設(shè)計完成。在這個子系統(tǒng)中使用接口分離了接口和具體實現(xiàn),使用Spring的IoC消除了硬編碼,最后,使用Spring來調(diào)配系統(tǒng)中使用到的各種bean。這三種做法是降低系統(tǒng)耦合度,提高程序可讀性和可維護的常見措施,這些常見編程手法在編程中多加使用對整個程序?qū)⒋笥旭砸妗?

    例程下載
    http://m.tkk7.com/Files/heyang/AOPPrivilegeSample20090102104233.rar

    需要自行載入的包為:
    commons-logging-1.0.4.jar,log4j-1.2.14.jar,spring.jar
    posted on 2009-01-02 10:35 何楊 閱讀(466) 評論(1)  編輯  收藏

    Feedback

    # re: 簡單值控制權(quán)限系統(tǒng)的設(shè)計 2009-08-26 14:09 青秀
    沒人頂,我頂了。  回復(fù)  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久国产色AV免费观看| 免费的一级黄色片| 日韩精品人妻系列无码专区免费 | 一区二区三区福利视频免费观看| 亚洲国产精品自在在线观看 | 午夜时刻免费入口| 国产VA免费精品高清在线| 国产成人aaa在线视频免费观看| 久久精品国产亚洲AV忘忧草18| 免费国产综合视频在线看| 亚洲第一街区偷拍街拍| 亚洲愉拍99热成人精品热久久| 在线观看H网址免费入口| 一级一片免费视频播放| 亚洲免费中文字幕| 亚洲日韩欧洲乱码AV夜夜摸| 97无码免费人妻超级碰碰碰碰| 中文字幕在线观看免费| 亚洲国产一成人久久精品| 性色av无码免费一区二区三区| 不卡视频免费在线观看| 久久无码av亚洲精品色午夜| 亚洲第一成人影院| 国产精品色拉拉免费看| a成人毛片免费观看| 爱情岛论坛亚洲品质自拍视频网站| 在线日韩av永久免费观看| 污污网站18禁在线永久免费观看| 羞羞漫画在线成人漫画阅读免费| 亚洲成年人免费网站| 国产AV无码专区亚洲AVJULIA| 免费在线黄色网址| 四虎成人免费影院网址| 免费国产污网站在线观看15| 一个人看的免费高清视频日本| 亚洲综合色婷婷在线观看| 亚洲色图综合网站| 久久久久亚洲精品无码系列| 最新精品亚洲成a人在线观看| 国产免费人成视频在线观看| 成人免费看片又大又黄|