當柳上原的風吹向天際的時候...

          真正的快樂來源于創造

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
          系統需求

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

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

          需要實現的IDocService接口如下:
          package com.heyang.traditonal.service;

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

          /**
           * DocService需要實現的接口
           * 
          @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);
          }


          權力限制的基本結構
          對于這種簡單權限處理當然不難,在執行的方法中取得用戶權限再看它是否高于指定的權限即可,大于則執行處理,小于等于則不予執行。程序的基本結構如下:

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

            
          else{
              
          // 權限不夠
            }

          }


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

          IDocService實現類

          package com.heyang.traditonal.service;

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

          /**
           * 為領域對象Doc提供服務
           * 
          @author 何楊(heyang78@gmail.com)
           *
           * 
          @since 2008-12-30 下午05:13:29
           * 
          @version 1.00
           
          */

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

              }


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

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

              }


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

                  
          else{
                      System.out.println(
          "用戶權限必須達到"+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>

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

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

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

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

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

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

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

          小結
          至此,權限子系統設計完成。在這個子系統中使用接口分離了接口和具體實現,使用Spring的IoC消除了硬編碼,最后,使用Spring來調配系統中使用到的各種bean。這三種做法是降低系統耦合度,提高程序可讀性和可維護的常見措施,這些常見編程手法在編程中多加使用對整個程序將大有裨益。

          例程下載
          http://www.aygfsteel.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 何楊 閱讀(469) 評論(1)  編輯  收藏

          Feedback

          # re: 簡單值控制權限系統的設計 2009-08-26 14:09 青秀
          沒人頂,我頂了。  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 嘉义县| 江油市| 新昌县| 治多县| 凌海市| 红安县| 穆棱市| 于田县| 清镇市| 马山县| 雅江县| 正镶白旗| 无极县| 兰西县| 江源县| 资兴市| 青州市| 会同县| 从化市| 安龙县| 望都县| 靖宇县| 塔河县| 阜康市| 中牟县| 夹江县| 汝城县| 保德县| 六枝特区| 克什克腾旗| 井研县| 南靖县| 乐昌市| 阳高县| 玉门市| 大城县| 长乐市| 咸宁市| 兴海县| 开鲁县| 文成县|