解决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);
        }

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

转载于:https://www.cnblogs.com/tomin/archive/2012/01/10/2317851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值