escout

          代碼、心情

          常用鏈接

          統計

          SOA相關

          我參與的團隊

          最新評論

          基于RBAC的權限模型

          權限模型

          把權限模型劃分為頁面訪問控制權限和數據權限 ( 商業邏輯權限 ) 。其中,頁面訪問控制權限主要在于控制頁面是否可以被訪問,比如,管理員可以訪問權限設置頁面。數據權限主要是指是否有操作某個數據的權限,比如說組織機構中的部分問題,一個部門應該只看到本部門的數據,這就是數據權限,這個應該在業務邏輯中控制,而不是頁面中。

          本權限模型專注于頁面訪問控制,不涉及數據操作權限。使用用戶、角色、資源和操作來控制實際的頁面訪問。同時,區別于一般的頁面權限模型,本模型采用細粒度的權限控制,可以控制到頁面的具體操作,很不是整個頁面不加區分。所以,這樣就可以在一個頁面放置多個操作,方便于用戶,同時又不失安全性。

          考慮到權限在實際中很少變動,使用數據庫的冗余設計,還有數據緩存等來提高效率。

          ?

          用戶: User

          ?????? Id name

          用戶角色表( 1 對多):

          ?????? Id userID roleID

          角色 : Role

          ?????? Id name description defaultPage (系統初始化時,使用的登陸頁?)

          權限 (Role-Resource-Operation) Authority

          ?????? Id role resource resourceURL (為效率考慮采用的冗余,等同 Resource 中的 url ,在實際驗證中將使用該 url 來驗證)、 operationID operationName (為效率考慮,采用冗余,等同 Operation 中的 name ,實際驗證中使用該操作名稱來做驗證)

          資源: Resource

          ?????? Id name description url

          操作: Operation

          ?????? Id name( 一般應改為英文,對應方法的名字 ) description

          ?

          BaseAction 中應該有一個 getMethodAuthMap (),得到方法和可用操作的映射。如果映射中找不到,則直接使用該方法名當作操作名稱。如果方法映射找到了,但是為空,這意味著該方法對于任何用戶都是可以訪問的,不要求驗證。子類可以繼承和覆蓋該方法,來實現特殊的權限邏輯。

          ?

          權限操作應該允許復制已有的權限來生成新的權限。

          在前端控制器中設置已有的對于某個資源的操作,放到 hashtable 中,比如 auth 。對于頁面,使用表達式語言 EL 來限制實際的邏輯,比如如下要求對于當前頁面要有 delete 權限:

          ?????? <c:if test=”auth.delete”>

          ?????? </c:if>

          同時,在整體頁面中,使用 struts dispathAction 來做分發, url 形如 url?method=delete 在執行該方法之前,首先檢查當前頁面的這個權限 delete ,如果可以,則導向到正確的頁面,否則導向到 accessDenied.do 頁面(注意,該頁面比較特殊,對于任何用戶都應該是可以訪問的,也就是前面的 getMethodAuthMap 返回為 NULL

          ?

          posted on 2006-04-30 17:27 綠色使者、綠色心情 閱讀(1008) 評論(0)  編輯  收藏 所屬分類: java 安全


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


          網站導航:
           
          主站蜘蛛池模板: 临洮县| 广昌县| 鄄城县| 长丰县| 靖宇县| 东平县| 左权县| 扶余县| 涟水县| 黑山县| 滦南县| 乳源| 峨眉山市| 犍为县| 泗水县| 庆阳市| 醴陵市| 苏州市| 靖州| 洛宁县| 大方县| 五河县| 新宁县| 贡山| 将乐县| 卢氏县| 新野县| 左贡县| 普洱| 娱乐| 望奎县| 莱芜市| 望江县| 永定县| 扬中市| 寿阳县| 阜康市| 桑植县| 宁德市| 平谷区| 兴文县|