httpmodule權限應用

權限不管如何設計,縮小到原子級別,大體是這樣的:web

key-value,權限編碼--對應權限。c#

實現方式多種多樣。但在應用上,倒是一致的。即從權限集(一般緩存)中,根據權限的key,判斷是否有權限。緩存

有到頁面上,也有到頁面的具體功能上。函數

說一下道頁面級別的權限應用。網站

咱們的項目是這樣設計的。ui

表1(頁面權限編碼):編碼

functionId,urlurl

100001,Default.aspx設計

表2(用戶權限)繼承

functionid,userid

100001,1

分配權限時,記錄functionid.這樣就知道擁有的具體權限。

階段1、

在每個頁面上,假如權限判斷方法。沒有權限時,進行相應的處理。固然沒有權限的頁面不會在菜單中顯示的。

毫無疑問,工做量很大,幾乎每一個頁面都須要加入一樣的代碼。惟一不一樣的是不一樣頁面的key是不一樣的。

同時還有一個缺點,key容易寫錯。每每是複製,修改key。違反了DRY原則。

驗證權限方法:HasPermisstion(key)key:權限編碼

階段2、

因爲key很容易些錯,對方法進行了修改。頁面名稱做爲key,根據頁面名去判斷權限。而頁面名稱不須要做爲參數傳入,少了一個參數。

所以方法改成HasPermisstion()

在函數體內部,能夠經過HttpContext獲取頁面信息。

由階段一的100001做爲查找關鍵字,變爲default.aspx(請求頁面地址)

一樣每一個頁面都須要增長驗證方法!

階段3、

使用Ihttpmodule進行權限的控制。

因爲須要讀取Session,須要繼承接口System.Web.SessionState.IRequiresSessionState 

在事件AcquireRequestState中進行權限判斷,調用HasPermisstion()方法。

克服了前兩個階段的缺點。開發這樣一個DLL,在web.config進行配置,便可使用。

想取消時,也很是簡單,直接在web.config中刪除相應的引用便可。不管怎麼更改,不須要從新發佈網站。

關於Ihttpmodule請查閱資料。

開發環境: c#2008

相關文章
相關標籤/搜索