解决HttpContext.User.IsInRole() 永远返回false的问题


这几天在用MVC做一个项目,用到了HttpContext.User.IsInRole() 这个方法,但是每次当我用的时候,HttpContext.User.IsInRole(“Admin”) 返回的永远是false。 在网上查了很多资料,发现都没有解决,要解决的话,也要实现一系列的扩展方法。好,废话少说,正式进入主题:

权限判断
if (HttpContext.User.Identity ==  null || String.IsNullOrEmpty(HttpContext.User.Identity.Name))
 {
       return Redirect( " ~/Account/LogOn?returnUrl=/service ");
 }
else  if (HttpContext.User.IsInRole( " Admin "))
  {
          return RedirectToAction( " Index "" AdminService ");
 }
else
{
  …….
}

上面的代码中HttpContext.User.IsInRole(“Admin”) 返回的是false。我们要返回True怎么办?

Global.asax中添加以下方法:

View Code
///   <summary>
///  Authen right for user
///   </summary>
///   <param name="sender"></param>
///   <param name="e"></param>
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)
                    {
                         // Get current user identitied by forms
                        FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                         //  get FormsAuthenticationTicket object
                        FormsAuthenticationTicket ticket = id.Ticket;
                         string userData = ticket.UserData;
                         string[] roles = userData.Split( ' , ');
                         //  set the new identity for current user.
                        HttpContext.Current.User =  new GenericPrincipal(id, roles);
                    }
                }
            }
        }

添加好以后,进入你的登录页面,给当前用户授权。请看:

LogOn
[HttpPost]
public ActionResult LogOn(LogOnModel model,  string returnUrl)
{
    if (ModelState.IsValid)
   {
      if(ValidateUser(model.UserName, model.Password)))
     {
 UserInfo userInfo = GetuserInfo(model.UserName);
if (userInfo.Role == " Admin ")                    {
    role =  " Admin ";
}
FormsAuthenticationTicket authTicket =  new FormsAuthenticationTicket( 1,
                        userInfo.Alias,
                        DateTime.Now,
                        DateTime.Now.AddMinutes( 30),
                         false,
                        role);
                     string encTicket = FormsAuthentication.Encrypt(authTicket);
                     this.Response.Cookies.Add( new HttpCookie(FormsAuthentication.FormsCookieName,encTicket));

                   //   FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                     if (Url.IsLocalUrl(returnUrl) && returnUrl.Length >  1 && returnUrl.StartsWith( " / ")
                        && !returnUrl.StartsWith( " // ") && !returnUrl.StartsWith( " /\\ "))
                    {
                         return Redirect(returnUrl);
                    }
                     else
                    {
                         return RedirectToAction( " Index "" Home ");
                    }
                }
                 else
                {
                    ModelState.AddModelError( """ The user name or password provided is incorrect. ");
                }
            }

             //  If we got this far, something failed, redisplay form
             return View(model);
        }

 好了,直到这里,所有的问题,已经解决了。如果大家有其他的好的方法,可以分享, 欢迎留言指正 :)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM