ASP.NET MVC 中实现基于角色的权限控制的处理方法

 更新时间:2013年03月20日 15:42:53   作者:  
在ASP.NET MVC中,通过使用其所提供的内置

[Authorize]
public ActionResult Index()

标记的方式,可以实现所标记的ACTION必须是认证用户才能访问;

通过使用

[Authorize(Users="username")]

的方式,可以实现所标记的ACTION必须是某个具体的用户才能访问,以上两种方式使用起来非常方便,在NeedDinner示例程序中已有具休的实现过程,

但是,我们在实际的应用中所使用的大都是基于角色(Roles)的认证方式,NeedDinner中却未给出,本文给出具体实现(基于ASP.NET Forms验证)过程:

step 1
在完成UserName和Password认证后,向客户端写入认证Cookie

代码

复制代码 代码如下:

        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
            1,
            userName,
            DateTime.Now,
            DateTime.Now.AddMinutes(20),
            false,
            "admin"//写入用户角色
            );

        string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

        System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
        System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);

step 2
在Global.asax.cs文件中加入以下代码,用于在用户登陆网站时读取Cookie

代码

复制代码 代码如下:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie == null || authCookie.Value == "")
        {
            return;
        }
        FormsAuthenticationTicket authTicket = null;
        try
        {
            authTicket = FormsAuthentication.Decrypt(authCookie.Value);
        }
        catch
        {
            return;
        }
        string[] roles = authTicket.UserData.Split(new char[] { ';' });
         if (Context.User != null)
        {
            Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles);
        }
    }

step 3

这样以来,就可以使用实现以下效果

复制代码 代码如下:

  [Authorize(Roles="admin")]
    public ActionResult Index(int ? page)

相关文章

  • ASP.NET实现数据的添加(第10节)

    ASP.NET实现数据的添加(第10节)

    这篇文章主要介绍了ASP.NET如何实现数据的添加,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • .Net语言Smobiler开发之如何在手机上实现表单设计

    .Net语言Smobiler开发之如何在手机上实现表单设计

    这篇文章主要为大家详细介绍了.Net语言APP开发平台,如何在手机上实现表单设计(Smobiler),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • ASP.NET防止SQL注入的方法示例

    ASP.NET防止SQL注入的方法示例

    这篇文章主要介绍了ASP.NET防止SQL注入的方法,结合具体实例形式分析了asp.net基于字符串过滤实现防止SQL注入的相关操作技巧,需要的朋友可以参考下
    2017-03-03
  • WEB上调用HttpWebRequest奇怪问题的解决方法

    WEB上调用HttpWebRequest奇怪问题的解决方法

    WEB上调用HttpWebRequest奇怪问题的解决方法...
    2007-04-04
  • ASP.NET MVC 4 捆绑和缩小实例介绍

    ASP.NET MVC 4 捆绑和缩小实例介绍

    在 ASP.NET MVC 4 中可捆绑多个 css 和 js 文件以减少HTTP请求,并对 css 和 js 文件进行压缩(缩小),这样可提高网站的加载速度
    2013-06-06
  • asp.net 根据汉字的拼音首字母搜索数据库(附 LINQ 调用方法)

    asp.net 根据汉字的拼音首字母搜索数据库(附 LINQ 调用方法)

    我们经常需要使用拼音首字母来检索数据库,特别是应用于医院、商店等行业软件中。譬如搜索“zgr”就可以搜索所有包含“中国人”的记录。那么如果来实现才能即高效又方便呢?
    2010-04-04
  • ASP.NET实现URL映射的方法

    ASP.NET实现URL映射的方法

    本文介绍ASP.NET中的URL映射,你可以用来在ASP.NET中干净地映射或重写URL,以及按照你自己的需求组织你的URL的结构。
    2016-04-04
  • .net core中Quartz的使用方法

    .net core中Quartz的使用方法

    这篇文章主要介绍了.net core中Quartz的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • .NET Core自定义项目模板的全过程

    .NET Core自定义项目模板的全过程

    这篇文章主要给大家介绍了关于.NET Core自定义项目模板的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 关于Swagger优化的实战记录

    关于Swagger优化的实战记录

    Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful风格的Web服务,下面这篇文章主要给大家介绍了关于Swagger优化的相关资料,需要的朋友可以参考下
    2022-04-04

最新评论