导航

asp.net mvc 中使用自定义方法验证角色权限

Posted on 2012-05-14 21:14  yjss  阅读(518)  评论(1编辑  收藏  举报

在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