你的位置:首页 > ASP.net教程

[ASP.net教程]【MVC5】使用权限+角色


1.在Ticket中设置用户角色

在权限的Ticket中设置用户的角色(这里是逗号分割)。

List<string> roles = new List<string>();if (isAdmin) {  roles.Add("Admin");} roles.Add("Guest");FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(  1,   model.UserId,   DateTime.Now,   DateTime.Now.AddDays(30),  // 设置记住登录的时间(这里是30天)  true,  String.Join(",", roles));  // 设置用户角色HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));// 设置cookie的过期时间(这里是50年)cookie.Expires = DateTime.Now.AddYears(50);Response.Cookies.Add(cookie);

2.在Global.asax.cs中添加Application_AuthenticateRequest方法

protected void Application_AuthenticateRequest(object sender, EventArgs e) {  // 取得认证Check的Cookie  HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];  if (cookie == null) return;  // 解密  FormsAuthenticationTicket ticket = null;  try {    ticket = FormsAuthentication.Decrypt(cookie.Value);  }  catch (Exception) {    return;  }  if (ticket == null) return;  // 取得ticket.UserData中设定的角色  string[] roles = ticket.UserData.Split(new char[] { ',' });  // From认证中,使用IPrincipal对象中的GenericPrincipal类。  // 该类由表示资格情报的FormsIdentity类和角色信息(string[]对象)组成。  FormsIdentity identity = new FormsIdentity(ticket);  GenericPrincipal principal = new GenericPrincipal(identity, roles);  // 把FormsIdentity赋值到Context.User中  // 可以从Page.User中取得该值  Context.User = principal;}

3.在Controller中使用Authorize特性

// 允许匿名访问[AllowAnonymous]public class HomeController : Controller{  ......}// 只允许登录用户访问[Authorize]public class SampleController : Controller {  ......}// 只允许具有"Admin"角色的用户访问[Authorize(Roles = "Admin")]public class SampleController : Controller {  ......}// 该特性同样可用于Action

参照:http://www.atmarkit.co.jp/ait/articles/0307/26/news002_2.html

已同步到【MVC5】ASP.NET MVC 项目笔记汇总