解決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