1. 程式人生 > >ASP.NET 基於FORMS驗證的目錄角色許可權

ASP.NET 基於FORMS驗證的目錄角色許可權

一個系統中經常有多種身份的使用者,往往要根據其身份來控制目錄的訪問許可權。asp.net提供了forms驗證,能夠輕易的在配置檔案中設定使用者對目錄的訪問許可權.

但是我在使用過程中,發現針對角色的控制並不是那麼容易,通過在網上查詢資料,終於解決這個問題。下面將主要的注意事項列出來。
1、配置檔案中,角色的allow項要放在deny項的前面,users要配置為*,而不是?

<location path="Doctors"> 
<system.web> 
<authorization> 
<allow roles="doctors"/> //這個在前 
<deny users="*"/> 
</authorization> 
</system.web> 
</location> 

 2、將角色寫入票據

string role="doctors"; 
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(30), false, role, "/");//建立身份驗證票物件 
string HashTicket = FormsAuthentication.Encrypt(Ticket);//加密序列化驗證票為字串 
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket); 
//生成Cookie 
Response.Cookies.Add(UserCookie);//輸出Cookie 
Response.Redirect("");//重定向到使用者申請的初始頁面 

 3、身份票據並沒有直接提供對role的直接支援,需要在Application_AuthenticateRequest中對role進行解析

string[] roles = authTicket.UserData.Split(new char[] { '|' }); 
FormsIdentity id = new FormsIdentity(authTicket); 
System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, roles); 
Context.User = principal; 

大致弄清這三點,就可以了。

裡面有包含例子, 可以下載附件