張政毅
摘 要:在.net技術如此成熟的現在,很多Web程序都支持用戶帳號,根據不同的登錄用戶提供不同的選項,報表等功能。此外,可能我們還想包含一些帳號留給我們自己公司用戶,以便讓它們能夠登錄并進行產品信息修改,比如股價,級別調整等等。本文重點不在如何進行身份認證,而在身份認證完成后也即進入系統大門后,如何保證用戶只在自己有權限的范圍內進行操作,而不是可以進行任意功能的操作即基于角色的按鈕級別細粒度權限控制解決方案。
關鍵詞:.NET角色;權限控制
1 基于角色的權限控制系統
基于角色的權限控制系統RBAC(Role Based Access Control)是目前最流行,也是最通用的權限控制系統。在ASP.NET中我們可以通過membership來實現創建,管理,驗證用戶帳號的標準的,可以擴展的平臺。由于本論文是示范針對不同登錄用戶調整數據修改的能力, 并不是要凸顯使用ASP.NET 的membership,roles,和profile系統,我們會使用一種很簡單的機制來決定用戶訪問網頁的這種能力。
2 利用ASP.NET中web控件實現權限控制的思路
大部分提供帳號的站點需要根據登錄用戶而定制不同的數據修改界面。管理員或許能夠刪除或編輯任何記錄,沒有管理權限的用戶可能被限制只能更新或刪除他們自己創建的數據。無論是哪類情況,數據web控件,ObjectDataSource,以及業務邏輯層的類可以用來擴展成基于登錄用戶的添加刪除功能。
以AspxGridView為例,盡管web控件已經有了全面的功能,但是可能它為用戶提供了太多的權限,此時,我們就需要進行權限控制。通常用戶能夠瀏覽到和修改的數據有著固定的業務規則,當不同的角色登陸時,我們會在AspxGridView中隱藏掉編輯按鈕。為AspxGridView的CommandButtonInitialize事件新建一個事件處理器。在事件處理器中我們需要判斷該條數據是否的操作員和當前登錄人員是否是同一人。我們可以通過web控件的GetValues屬性來獲得一個綁定到AspxGridView上的Row實例。如果不滿足相應的業務規則,我們可以通過在AspxGridView的ColumnCommandButtonType中獲取一個按鈕的引用,一旦我們獲得這個引用,我們就可以隱藏或者刪除這個按鈕。代碼如下:
protected void ASPxGridView_zzxx_CommandButtonInitialize(object sender, ASPxGridViewCommandButtonEventArgs e){
string V_DQCZY = Convert.ToString(ASPxGridView_zzxx.GetRowValues(e.VisibleIndex, "CZRYBM")); //通用取gv中值
//獲取ASPXGRIDVIEW中某一行中某個單元格的值,此處是取操作員
string v_czybm = HUBU.UserFoundation.CurrentUserID;
//調用公共類,取出當前操作員
if (V_DQCZY != v_czybm)//如果不是同一操作員,則隱藏刪除和編輯按鈕
{
if (e.ButtonType == ColumnCommandButtonType.Delete)
{
e.Visible = false;
}
if (e.ButtonType == ColumnCommandButtonType.Edit)
{
e.Visible = false;
}
}
}
3 結束語
科技時代,信息是企業生存的命脈,信息的安全也必然成為企業極度重視的問題。基于角色的權限控制作為保護信息安全中的有效措施,現已有廣泛的運用。與membership,roles相比,這種按鈕顆粒度的權限控制顯得更為方便和簡單,且實用性強。
參考文獻:
[1]管理信息系統中基于角色的訪問控制[J]. 曹天杰,張永平. 計算機應用. 2001(08)
[2]面向用戶角色的細粒度自主訪問控制機制[J]. 魏立峰,孟凱凱,何連躍. 計算機應用. 2009(10)
[3]基于權限訪問的信息運維分級安全管理[J]. 冷小潔. 農電管理. 2017(07)endprint