ASP.NET 基於FORMS驗證的目錄角色許可權
阿新 • • 發佈:2019-01-05
一個系統中經常有多種身份的使用者,往往要根據其身份來控制目錄的訪問許可權。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;
大致弄清這三點,就可以了。
裡面有包含例子, 可以下載附件