天天看點

權限驗證MVC

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);

}

}

}

}