B/S系統權限組設計方案

記得大二暑假時曾經參加過一個OA系統的開發,在安全方面系統採取對擁有不同操作權限的用戶進行分組,也就是權限組或者叫用戶組,管理員可以控制用戶該做什麼,不該做什麼,但當時我只是負責其中的考勤系統設計,對這個並沒有太多關注。

不過最近想了想,決定進行一點簡單的設計。

從關係上看:

l  每個權限組可以包含多個操作,每個操作可以被多個權限組包含,即多對多關係

l  每個權限組可以包含多個用戶,每個用戶可以屬於多個權限組,也是多對多關係

l  操作可以有父操作和子操作(這些不多說)

表與表之間的關係描述如下:

權限組N--1 中間表(權限組操作)1--N 操作

權限組N--1 中間表(權限組用戶)1--N 用戶

字段名字

字段介紹

類型

外鍵

 

操作表    operate

Id

主鍵

Int

 

Operate_name

操作名字

Char255

 

Operate_link

操作鏈接

Char255

 

operate_userGroup_id 

對應中間表id

Int

外鍵(中間表(權限組操作))

 

權限組   userGroup

Id

主鍵

Int

 

userGroup _name

 權限組名字

Var255

 

userGroup_operate_id

對應中間表id

Int

外鍵(中間表(權限組操作))

 

userGroup _user_id

對應中間表id

Int

外鍵(中間表(權限組用戶))

 

用戶   user

Id

主鍵

Int

 

user_name

用戶名

Char255

 

password

密碼

Char255

 

user _ userGroup _id

對應中間表id

Int

外鍵(中間表(權限組用戶))

 

中間表(權限組操作)   userGroup _operate

Id

主鍵

Int

 

userGroup _id

權限組ID

Int

 

operate_id

操作ID

Int

 

中間表(權限組用戶)   userGroup _user

Id

主鍵

Int

 

userGroup _id

權限組ID

Int

 

user_id

用戶ID

Int

 

添加一個超級管理員 (adminadmin),具備所有操作權限

l  管理員登錄,C操作

l  創建權限組,C操作

l  創建操作,C操作

l  創建用戶,C操作

l  向權限組添加操作,C操作

l  爲操作分配權限組,C操作

l  向權限組添加用戶,C操作

l  爲用戶分配權限組,C操作

l  當用戶進行一個操作時,會向目的地發出對應於該操作的編號ID,目的地接受到這個ID後,首先判斷該操作是否在表中存在,若存在就檢查該用戶所在權限組是否包含此操作,包含則執行此操作

l  此外,對操作,權限組,用戶以及用戶之間的關係也需要進行動態的管理,例如CRUD

 

測試

用戶登錄

執行某項操作

根據權限看是否執行成功

用戶權限驗證流程

 

J2EE結構中,通常我們可以在控制器如Servlet或者Action來對所有用戶的權限進行統一的校驗(當然過濾器也是個不錯的選擇),來對用戶操作進行統一的處理,比如說在一個Jsp+Servlet+JavaBeanB/S系統中,通常我們是由Servlet作爲控制器的,那麼我們就可以設計一個BaseServlet

對裏面的doPost(HttpServletRequest request,HttpServletResponse response)這樣設計

/**

*  這個doPost方法現在對權限進行校驗

*/

Public void doPost(HttpServletRequest request,HttpServletResponse response){

    //獲取操作ID

    Int operateId =new ParseRequest().parseInt(request,”operateId”,0);

    //判斷該操作是否存在數據庫中

If(new OperateService().isExist(operateId)){

    //如果該操作存在於數據庫中的話

    //獲取用戶ID

    Int userId=(UserInfo)request.getSession().get(“USERINFO”).getId();

    //判斷該用戶是否具備進行該操作得權限

    If(new UserService().is Valid(userId,operateId)){

        //該用戶可以進行此項操作

        //轉向執行方法

        Execute(request,response);

}else{

    //發生錯誤,用戶無權限進行此操作

}

}else{

    //發生錯誤,該操作不存在

}

}

/**

*  這個方法將被該類地子類實現,用來接收參數,調用Bean來完成一些操作

*/

Public void execute(HttpServletRequest request,HttpServletResponse response){

}

 

 

現在我們再開發Servlet的時候,只需要繼承這個BaseServlet,然後複寫Public void execute(HttpServletRequest request,HttpServletResponse response)方法,這樣就可以對權限操作進行有效的控制了,當然,筆者這裏建議最好你要跳轉到的jsp頁也採用Servlet進行轉發。

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章