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)

    非常方便!
     

     

  • 相关阅读:
    gcc, ld
    STM32,ARM,Keil工具相关
    ISC BIND DNS
    Linux系统iptables查看、设置、保存、备份和恢复
    JupyterHub的安装与配置——让Jupyter支持多用户
    Linux通过Shell脚本命令修改密码不需要交互
    Nginx使用Location匹配URL进行伪静态
    MySQL无法启动重启竟是因为改了Linux主机名
    17个C语言可以做的小案例项目
    HUSTOJ增加其他语言出现RuntimeError解决办法
  • 原文地址:https://www.cnblogs.com/Yinner/p/1674667.html
Copyright © 2011-2022 走看看