2.使用安全特性配合Forms驗(yàn)證進(jìn)行安全操作。
PrincipalPermissionAttribute可以配合Forms驗(yàn)證進(jìn)行基于角色或用戶的安全驗(yàn)證,該特性不能用于程序集級(jí)別。它的作用范圍可以是類或具體的方法。來看一個(gè)簡單的示例。
[PrincipalPermission(SecurityAction.Demand,User="Notus")] public class Test : BasePage { private void Page_Load(object sender, System.EventArgs e) { try { this.sayHello(); this.sayHello2(); } catch(Exception ex) { Response.Write(ex.ToString()); } }
private void sayHello() { Response.Write("hello world!"); }
private void sayHello2() { Response.Write("hello PrincipalPermissionAttribute!"); }
#region Web 窗體設(shè)計(jì)器生成的代碼 override protected void OnInit(EventArgs e) { // // CODEGEN: 該調(diào)用是 ASP.NET Web 窗體設(shè)計(jì)器所必需的。 // InitializeComponent(); base.OnInit(e); }
/// <summary> /// 設(shè)計(jì)器支持所需的方法 - 不要使用代碼編輯器修改 /// 此方法的內(nèi)容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion
}
注意這個(gè)例子一開始是作用于整個(gè)類的,生成后執(zhí)行,如果當(dāng)前用戶不是Notus,就會(huì)發(fā)生異常System.Security.SecurityException,提示對(duì)主體權(quán)限的請(qǐng)求失敗。反之,則可以順利訪問,并輸出兩個(gè)hello world!,注意是兩個(gè),F(xiàn)在的安全作用范圍是整個(gè)類。
接下來我們改一下特性的作用范圍。將特性聲明移到sayHello2方法上面,重新編譯后運(yùn)行,就會(huì)發(fā)現(xiàn)程序在運(yùn)行到sayHello2方法后拋出了System.Security.SecurityException。這說明現(xiàn)在安全作用范圍縮小到了方法級(jí)別。
該特性可以通過設(shè)置User和Role來進(jìn)行基于用戶和角色的安全保護(hù)。另外其使用的第一個(gè)參數(shù)是SecurityAction枚舉,該枚舉設(shè)置了具體的保護(hù)級(jí)別或措施。像我們現(xiàn)在使用的這個(gè)Demand,是要求調(diào)用堆棧中的所有高級(jí)調(diào)用方都已被授予了當(dāng)前權(quán)限對(duì)象所指定的權(quán)限。
下面是msdn給的示例
示例
下面的示例說明可以如何以聲明方式使用 PrincipalPermission 要求當(dāng)前用戶是 Bob 并且屬于 Supervisor 角色。 [PrincipalPermissionAttribute(SecurityAction.Demand, Name="Bob", Role="Supervisor")]下面的示例說明如何要求當(dāng)前用戶的身份是 Bob,與角色成員條件無關(guān)。 [PrincipalPermissionAttribute(SecurityAction.Demand, Name="Bob")] 下面的示例說明如何僅要求對(duì)用戶進(jìn)行身份驗(yàn)證。 [PrincipalPermissionAttribute(SecurityAction.Demand, Authenticated=true)]
再要說一下的是,這里面的User和Role是可以和Forms驗(yàn)證集成的,據(jù)此,我們可以在一些重要的類或方法中使用PrincipalPermissionAttribute,以將自己的程序武裝到家。
而實(shí)際上,該特性的作用遠(yuǎn)不止這些,更詳細(xì)的信息可以查閱msdn。
出處:藍(lán)色理想
責(zé)任編輯:冰點(diǎn)的冰藍(lán)色
上一頁 使用Forms驗(yàn)證存儲(chǔ)用戶自定義信息 下一頁
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|