在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
浙公网安备 33010602011771号