这几天在用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
{
…….
}

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中添加以下方法:

/// <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);
}
}
}
}

/// <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);
}

[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/sjqq/p/7365938.html

MVC 用户权限HttpContext.User.IsInRole()相关推荐

  1. MVC用户权限管理AuthorizeAttribute

    一.权限类 public  class UserAuthority {         public static string Admin { get; set; } } 二.cs代码 [HttpP ...

  2. ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)

    上一篇,主要讲解了模型的创建和利用Entity Framework来操作数据库,这篇我们会讲解如何创建控制器和视图. 由于最近很多网友反馈在VS 2012 无法安装NBlock框架模版,故再次声明,N ...

  3. MVC项目中用户权限的限制

    MVC项目中用户权限的限制 开发工具与关键技术: MVC 作者:姚智颖 撰写时间:2020/08/16 注释:下面以机订票系统中角色维护功能为例,设置其中不同级别的用户在整个系统中一些功能的访问权限. ...

  4. asp.net core根据用户权限控制页面元素的显示

    asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...

  5. 2_MVC+EF+Autofac(dbfirst)轻型项目框架_用户权限验证

    前言 接上面两篇 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架 与 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例) .在第一篇中介 ...

  6. 一起谈.NET技术,ASP.NET MVC Membership 权限 漫谈

    以前一位同事习惯于使用Membership来进行权限管理,现在随着ASP.NET MVC的引入,采用以前的方法,提出了以下方案: ASP.NET MVC+Membership结合,通过在web.con ...

  7. 微服务之间单点登录和用户权限认证的实现

    目录 单系统登录机制 HTTP无状态协议 Cookie会话机制 登录状态 多系统登录难点 单点登录系统 单点登录流程 单点注销流程 部署图 子系统与sso认证中心的功能 准备工作 项目结构 修改网关配 ...

  8. springBoot+security+mybatis 实现用户权限的数据库动态管理

    [b][size=large]一.Spring Security 应用的概述[/size][/b] [size=medium] 鉴于目前微服务的兴起,Spring周边方案的普及,以及 Spring S ...

  9. mysql用户控制登录_MySql用户权限控制_MySQL

    bitsCN.com MySql用户权限控制 本文将介绍MySql创建帐号,删除帐号,设置和介绍各种帐号的权限 创建用户帐号: www.bitsCN.com [sql] CREATE USER use ...

最新文章

  1. AlarmManager与PendingIntent的联合使用(二)
  2. iOS linker command failed with exit code 1 (use v to see invocation)
  3. 元宇宙iwemeta: 克林顿指出,加密货币与生物恐怖主义有相同的威胁
  4. WP7进阶】——XNA游戏平面矩形碰撞检测
  5. 谷歌最终还是把Knative交了出来
  6. 华为薪资等级结构表_华为21级程序员月薪曝光:月薪27w,什么概念!程序员中的战斗机...
  7. Java基础 HashMap的添加 修改 遍历 Map.Entry Map.entrySet()的使用及实例
  8. $limit、$skip、$unwind
  9. 在ie中关于ajax请求获得数据缓存问题的解决办法
  10. Java项目中常见的文件夹名称
  11. 麦吉尔大学计算机工程的世界排名,加拿大十大名校世界排名:麦吉尔大学上榜,第一名全球排名20...
  12. unity添加android res资源,Unity3d常用两种加载资源方案:Resources.Load和AssetBundle
  13. jmeter压力测试并发
  14. Medium无限文章阅读会员插件
  15. 字节流读写文件案例——模拟文件(头像)上传功能
  16. 冬战柴达木的压裂“将士”
  17. 正三角形旋转一周得到的图形是_将图中的直角三角形绕最长的边旋转一周可以得到的一个几何体,从正面看这个几何体所得到的平面图形是()A.B...
  18. perl链接数据库实例
  19. toad for mysql 彻底卸载_toad for mysql 下载
  20. 论文阅读笔记(DIP):Deep Image Prior

热门文章

  1. Linux下搭建yum服务器
  2. 3D竞技比赛或成数字娱乐新里程碑
  3. 我写的第一个CodeSmith模板(添加修改数据页面)
  4. hadoop的三大核心组件之HDFS和YARN
  5. flask和vue的冲突问题
  6. trust cv的含义
  7. 关于“xxx”object is not callable的异常(转)
  8. y460安装的ubuntu开机时笔记本键盘失效的问题
  9. python封装类连接mysql数据_python操作mysql数据库基本类封装
  10. Elasticsearch(二), WebService, 机器人参考资源, Spring