| 在百度百科里查到了權(quán)限管理系統(tǒng)的定義: 引用 權(quán)限管理,一般指根據(jù)系統(tǒng)設(shè)置的安全規(guī)則或者安全策略,用戶可以訪問而且只能訪問自己被授權(quán)的資源,不多不少。權(quán)限管理幾乎出現(xiàn)在任何系統(tǒng)里面,只要有用戶和密碼的系統(tǒng)。 任何一個系統(tǒng)都有對應(yīng)的權(quán)限管理模塊,比較粗糙的系統(tǒng)是在開發(fā)的時候就定義了哪些類型的用戶擁有某些權(quán)限,在開發(fā)過程中就把權(quán)限給定死了;有的則是通過模糊匹配url來進(jìn)行權(quán)限的控制,但是這些日后維護(hù)起來會比較麻煩,可能還有其他很多種方式來進(jìn)行權(quán)限的管理,但是不管通過何種方式,其目的都是為了能夠安全、靈活、方便的操作,而且還不能影響系統(tǒng)性能。 以下是我自己開發(fā)的后臺管理系統(tǒng)的權(quán)限模塊,分享一下我設(shè)計的權(quán)限模塊的開發(fā)思路: 后臺管理系統(tǒng)是基于Spring + struts2.0 + hibernate + Ext 3.2.1架構(gòu)開發(fā)的,因為前臺主要是以Ext為主,所以權(quán)限模塊也是在圍繞Ext樹進(jìn)行設(shè)計的。使用Ext開發(fā)過的同學(xué)都知道Ext.tree.TreePanel的節(jié)點是由Ext.tree.TreeNode定義的,其中Ext.tree.TreeNode中有個href屬性,接下來的權(quán)限控制就是圍繞這個href進(jìn)行控制的。 先來看看數(shù)據(jù)模型:   從模型中可以看到權(quán)限表引用了菜單管理這張表,擴(kuò)展這張權(quán)限表的目的是為了更靈活的對權(quán)限進(jìn)行管理,而不單單只是圍繞菜單樹,然后通過權(quán)限關(guān)聯(lián)表進(jìn)行角色權(quán)限的維護(hù)。 在找百度百科看看權(quán)限管理的分類 引用 權(quán)限管理分類
 從控制力度來看,可以將權(quán)限管理分為兩大類: 1,功能級權(quán)限管理; 2,數(shù)據(jù)級權(quán)限管理。 從控制方向來看,也可以將權(quán)限管理分為兩大類: 1,從系統(tǒng)獲取數(shù)據(jù),比如查詢訂單、查詢客戶資料; 2,向系統(tǒng)提交數(shù)據(jù),比如刪除訂單、修改客戶資料。 接下來進(jìn)入權(quán)限模塊的開發(fā)階段,系統(tǒng)是根據(jù)角色進(jìn)行權(quán)限控制的,在用戶登入系統(tǒng)的時候,獲取用戶的角色信息,然后獲取角色的權(quán)限信息也就是URI列表保存在session中(ps:權(quán)限信息不一定保存在session中,也可以借助第三方存儲,比如:memcache),通過過濾器來進(jìn)行訪問控制(判斷請求的URI是否在列表當(dāng)中)。當(dāng)然前臺js也要保存這些URI,這樣就可以同時控制界面元素是否展現(xiàn)了。 過濾器控制: Java代碼  
 前臺js控制: Js代碼  
 最后貼些圖上來看看: 權(quán)限管理模塊:   接下來看下一普通用戶的權(quán)限信息及登入界面: 普通用戶權(quán)限信息(選中為已分配權(quán)限):   普通用戶登入界面:   補充說明: 有些同學(xué)可能沒看明白,認(rèn)為權(quán)限粒度太粗,這里我特別說明一下:控制不當(dāng)單只是用戶入口(菜單)的控制,也包括了操作控制(即包含了權(quán)限過濾器指定下的所有URL)。完全可以控制到每一個操作。 | 
|  | 
來自: 安若婧年 > 《權(quán)限控制》