蛙蛙推薦:web下的授權簡單解決方案
【permission】表結構
【id】 int identity(1,1) not null pk:許可權編號,自增列
【title】narchar(50):許可權名稱
【parentid】 int:父類id
【url】varchar(500):選單的鏈結位址
【state】 int: 狀態字段,0表示選單,1是具體許可權
身份驗證
使用者表或者角色表裡加乙個許可權集【permissionset】的字段,裡面存放著用逗號隔開的許可權id,表示乙個許可權的集合,使用者進行身份驗證後把許可權字串儲存在formsauthenticationticket.userdata裡,或者儲存在
session["permission"]裡。
利用選單實現簡單授權
問題:我們的後台管理一般都有導航系統,各種角色登陸後這個導航選單顯示的元素是不一樣的,是根據許可權來顯示的。我們先解決這個問題。
一般來說是乙個樹型的選單,我們用微軟的ie webcontrols treeview來做導航,先定義乙個方法,**如下。
public
void addtree(string parentid,treenode pnode,treeview tvn)
else}}
載入選單用addtree("0",null,this.tree1)就可以了。
注意,如果你讓使用者沒有乙個大類選單的訪問許可權,卻讓它有這個大類選單的小類的訪問許可權,這個選單也不能顯示,因為遞迴不到那裡去。
問題:現在不該顯示的選單是不顯示了,但是不能防止使用者直接在位址列裡輸入路徑訪問頁面,下面我們來解決這個問題
實現頁面訪問許可權檢查
在頁面基類裡宣告兩個受保護成員,如下
protected string pageaccess; //頁面訪問許可權字串
protected bool ischkaccess = false; //本頁是否執行訪問許可權檢查,預設不執行檢查
在頁面基類的load事件裡呼叫下面的方法
void
chkaccess()
}讓所有的頁面繼承自你寫的自定義頁面基類,並在頁面的建構函式裡啟用頁面訪問許可權檢查並設定訪問許可權id,**如下
this.ischkaccess = true; //啟用頁面許可權檢查
this.pageaccess = "6"; //設定頁面訪問許可權字串為6,實際上是黃頁資訊管理許可權。
問題:現在惡意使用者直接敲擊位址也不能訪問不該訪問的頁面了,但是有時候乙個頁面上不同的角色呈現的頁面也是不一樣的,比如同樣的黃頁管理頁面,有些人可以審核,有些人不能審核,我們要動態的判斷是否顯示審核黃頁的按鈕
實現細粒度授權檢查
還是在頁面基類裡新增乙個方法,用來執行許可權的斷言。**如下
public
bool chkpermission(string permission)
其中getsqlscalar也是頁面基類裡定義的乙個快速執行資料庫操作的方法,然後你可以在具體的頁面的load方法裡動態的設定某個ui是否顯示。
trace.write("檢查審核黃頁的許可權",this.chkpermission("審核黃頁").tostring());
this
.button1.visible = this.chkpermission("審核黃頁");
上面的button1就是審核黃頁的按鈕。
不足之處:
1、這裡沒有考慮使用者,角色,許可權集等概念,只是做了一些授權的簡單實現,沒有提供完整的rbac方案。
2、這裡的資源繼承關係沒有考慮進去,也就是子選單是否繼承父選單的訪問許可設定。
3、這裡沒有定義黑名單和白名單的高階授權內容。
4、這裡沒有顯式定義每個資源的允許和拒絕許可權,以及許可權的計算策略。
5、這裡沒有考慮乙個使用者同時屬於多個角色時的許可權檢查策略。
6、這裡沒有考慮使用者的部門概念,關於組織機構概念,也沒有提到,儘管這是許可權系統設計的必要因素。
小節:有了這個介面後,再做乙個使用者,角色,許可權的管理介面就可以了,這些的管理的都是對資料庫的新增,修改,刪除操作,比較簡單了。主要是把許可權集繫結到角色,(多對多)然後把使用者繫結到角色(多對多),剩下的,就是使用者登陸的時候根據角色這個鏈結表,讀取它能獲取哪些許可權集,把這些許可權集合並起來,就是這個使用者的許可權集了。
蛙蛙推薦 微軟的常用資源列表
蛙蛙推薦 微軟的常用資源列表 最近微軟中文站點不知不覺的多了很多的訪問量,正是因為它給許多技術人員提供了很 多實用的技術資料和技術支援,筆者經常關注微軟的中文站點,去獲取一些有用的東西,web開發 msdn 微軟開發技巧系列網路講座 msdn 歸檔技術資源庫 資料訪問 資料庫 開發策略和倡議 off...
蛙蛙推薦 如何編寫高質量的python程式
規範 空白專案模版 單元測試 文件打包 小結首先閱讀下面的兩份規範,並深入理解。寫出規範的 是寫出高質量 的第一步,並且有助於培養仔細的習慣。為了培養規範寫 的習慣,可以安裝flake8這個工具,它不僅可以檢查 風格是否符合官方建議 pep8 而且還能找出潛在的隱患 用pyflakes做語法分析 更...
蛙蛙推薦 如何編寫高質量的python程式
原文 規範 空白專案模版 單元測試 文件打包 小結首先閱讀下面的兩份規範,並深入理解。寫出規範的 是寫出高質量 的第一步,並且有助於培養仔細的習慣。為了培養規範寫 的習慣,可以安裝flake8這個工具,它不僅可以檢查 風格是否符合官方建議 pep8 而且還能找出潛在的隱患 用pyflakes做語法分...