zoukankan      html  css  js  c++  java
  • ASP.NET MVC 中如何实现基于角色的权限控制

    在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)

  • 相关阅读:
    超哥笔记--linux准备知识(1)
    爬虫系列---scrapy全栈数据爬取框架(Crawlspider)
    爬虫系列---scrapy post请求、框架组件和下载中间件+boss直聘爬取
    pymongo 一篇文章搞定
    一篇文章搞定mongodb
    python进阶(四) windows下虚拟环境使用
    java基础(四) -变量类型
    java基础(二) -对象和类
    java基础(一) -语法
    Linux常用命令大全
  • 原文地址:https://www.cnblogs.com/oer2001/p/2971168.html
Copyright © 2011-2022 走看看