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)

    非常方便!
     

     

  • 相关阅读:
    JavaScript var,let,const三个关键字的区别
    nuxt head 配置
    阿里云MySQL安装到centos,并链接。
    js Array 的所有方法
    关于手机某些字体显是不全
    关于设备与canvas画不出来的解决办法
    关于github 新工程上传代码 git 命令
    高德地图3D菱形 区域点击搜索
    高德地图行政区域划分(西安)
    vue2获取dom节点
  • 原文地址:https://www.cnblogs.com/Yinner/p/1674667.html
Copyright © 2011-2022 走看看