在Global.asax中加入如下代码
protected void Application_AuthenticateRequest(Object sender, EventArgs e) { 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 对象 FormsAuthenticationTicket ticket = id.Ticket; // 取得 UserData 字段数据 (这里我们储存的是 MvcGuestbook 的角色) string userData = ticket.UserData; // 如果有多个角色可以用逗号分隔 string[] roles = userData.Split(','); // 赋予该用户新的身份 (含角色信息) HttpContext.Current.User = new GenericPrincipal(id, roles); } } } }
登录时写入cookie
string roles ="用户角色列表,逗号分割"; FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, "用户名", DateTime.Now, DateTime.Now.AddMinutes(30), // 登录时间 30 分钟到期 false, roles); string encTicket = FormsAuthentication.Encrypt(authTicket); this.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
在Controller或者Action上使用[Authorize(Roles = "角色列表",Users="用户列表")]即可,而无需重写MembershipProvider或AuthorizeAttribute