http://www.jb51.net/article/20147.htm 引用
<authentication mode="Forms"><!--權限受到阻礙将會跳轉到這個頁面,不寫找不到的時候則報404-->
<forms loginUrl="~/ExcelEport/Login" timeout="2880" />
</authentication>
// [Authorize(Roles = "Admin")]//隻有通過使用者才可以通路該方法
public ActionResult likJinbulai()//你要設定權限的頁面
{
//判斷通過身份驗證的使用者是否有權限通路本頁面
FormsIdentity id = (FormsIdentity)HttpContext.User.Identity;
//判斷通過身份驗證的使用者是否是Admin角色
if (id.Ticket.UserData.Contains("Admin"))
{
return View();
//跳轉到通路權限不夠的錯誤提示頁面
}
else
{
ViewBag.Authorize = false;
return View("youjinbulai");
//從哪裡來回哪裡去,在湖區的頁面添加以下代碼
//@if (@ViewBag.Authorize!=null)
//{
// if (!(@ViewBag.Authorize) )
// {
// <script type="text/javascript">
// $(function () {
// alert("您沒有權限");
// });
// </script>
// }
//}
}
}
///登陸使用者處理Action
public ActionResult LoginHandler(string userName, string userPwd,string role)
{
//mvc
////該使用者通過驗證後,會得到資料庫字段Roles
////驗證成功直接寫入用戶端cookie票據
//FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
//1,
//userName,//使用者登陸進來的使用者名
//DateTime.Now,
//DateTime.Now.AddMinutes(20),
//true,//是否存在持久,存儲在用戶端
//role//登陸使用者的角色寫入登陸使用者的角色
//);
////加密身份驗證票據
//string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
////把準備好的cookie加入到響應流中
//System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
//authCookie.Expires = authTicket.Expiration;//票據過期時間
////把準備好的cookie加入到響應流中
//System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
//web
//Forms身份驗證初始化
FormsAuthentication.Initialize();
//驗證使用者輸入并得到登入使用者,txtName是使用者名稱,txtPassword是登入密碼
//UserModel um = ValidUser(txtName.Text.Trim(), txtPassword.Text.Trim());
//建立身份驗證票據
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(30),
true,
role,//使用者所屬的角色字元串
FormsAuthentication.FormsCookiePath);
//加密身份驗證票據
string hash = FormsAuthentication.Encrypt(ticket);
//建立要發送到用戶端的cookie
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
if (ticket.IsPersistent)
{
cookie.Expires = ticket.Expiration;
}
//把準備好的cookie加入到響應流中
Response.Cookies.Add(cookie);
//轉發到請求的頁面
//Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false));
return View("youjinbulai");
}
//登出票據
public ActionResult ClearTicket()
{
//登出票據
FormsAuthentication.SignOut();
string script = "alert('您已經安全退出了!');";
return JavaScript(script);
}
//以下寫在Global.asax
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
//mvc
//HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
//if (authCookie == null || authCookie.Value == "")
//{
// return;
//}
//FormsAuthenticationTicket authTicket = null;
//try
//{
// authTicket = FormsAuthentication.Decrypt(authCookie.Value);
//}
//catch
//{
// return;
//}
//string[] roles = authTicket.UserData.Split(new char[] { ';' });
//if (Context.User != null)
//{
// Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles);
//}
//webform
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string userData = ticket.UserData;
string[] roles = userData.Split(',');
//重建HttpContext.Current.User,加入使用者擁有的角色數組
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
}
}
}
}