`

在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法

    博客分类:
  • .NET
阅读更多

很多用户在开发 ASP.NET 应用程序时都有这样的需求:管理员角色的账户使用管理员的登录界面进行登录,普通用户角色的账户使用普通用户的登录界面进行登录。由于ASP.NET的 web.config里只能使用一个 authentication mode="Forms" 节点,所以,要实现不同用户采用不同的登录界面,一个办法就是创建一个管理员专用的虚拟目录,并设置为应用程序来实现。下面介绍另外一种采用重定向的办法 来解决这个问题。
本文介绍的方法原理是根据登录界面的返回地址进行判断,然后重定向到不同的页面。下面就是实现的详细过程。

1,创建一个网站,在网站里创建Admin文件夹和User文件夹,分别存放admin和普通用户所使用的文件。也可以只设置一个 Admin 文件夹。由于本方法采用的判断返回路径的方法,所以,要能从路径中区分出哪些是admin用户使用的文件夹。当然,采用其他的判断方法也是可以的。

2,在网站根目录下分别创建3个登录文件:Login.aspx、UserLogin.aspx和AdminLogin.aspx。其中 Login.aspx文件起地址转换的作用,
Login.aspx文件的主要内容:

  1. protected   void  Page_Load( object  sender, EventArgs e)  
  2. {  
  3. String ReturnUrl = Request.QueryString["ReturnUrl" ];  
  4. if  (ReturnUrl ==  null  || ReturnUrl.Equals(String.Empty))  
  5. {  
  6.   //默认情况下,按普通用户进行登录   
  7.   Response.Redirect("~/UserLogin.aspx" );  
  8. }  
  9. else   
  10. {  
  11.   if  (ReturnUrl.ToLower().Contains( "/admin/" ))  
  12.   {  
  13.     Response.Redirect("~/AdminLogin.aspx?ReturnUrl="  + Server.UrlEncode(ReturnUrl));  
  14.   }  
  15.   else   
  16.   {  
  17.     Response.Redirect("~/UserLogin.aspx?ReturnUrl="  + Server.UrlEncode(ReturnUrl));  
  18.   }  
  19. }  

在这个文件的代码中,如果ReturnUrl中含有"/admin/",就重定向到AdminLogin.aspx登录界面;否则,就重定向到 UserLogin.aspx 登录界面。

UserLogin.aspx这个文件的内容如下:

  1. <%@ Page Language= "C#"  %>  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  3.  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >  
  4. <mce:script runat="server" ><!--  
  5.   protected   void  Button1_Click( object  sender, EventArgs e)  
  6.   {  
  7.     //密码验证过程在此省略,假如用户名是mxh,密码是mengxianhui   
  8.     String UserName = "mxh" ;  
  9.     FormsAuthenticationTicket ticket = new  FormsAuthenticationTicket(2, //票证的版本号   
  10.         UserName,//与身分验证票关联的用户名   
  11.         DateTime.Now, //票证发出时的本地 日期和时间   
  12.         DateTime.Now.AddHours(1),//票证过期的本地日期和时间   
  13.         true , // 如果票证存储在持久性cookie中(跨浏览器会话保存)则为 true 否则为false 如果票证储存在 URL中,将忽略此值   
  14.         "reader" , //储存在 票证中持定的用户信息,本页面供 reader 登录使用   
  15.         FormsAuthentication.FormsCookiePath //票证储存在cookie中的路径   
  16.     );  
  17.     //如果 forms 元素的 protection 属性设置为 All 或 Encryption,则窗体身份验证 使用 Encrypt 方法对窗体身份验证票进行加密和签名。   
  18.     string  encTicket = FormsAuthentication.Encrypt(ticket);  
  19.     HttpCookie cookie = new  HttpCookie(FormsAuthentication.FormsCookieName, encTicket);  
  20.     Response.Cookies.Add(cookie);  
  21.     Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName, true ));  
  22.   }  
  23. // --></mce:script>   
  24. <html xmlns="http://www.w3.org/1999/xhtml" >  
  25. <head runat="server" >  
  26.   <title>孟宪会之多用户登录测试页面</title>  
  27. </head>  
  28. <body>  
  29.   <form id="form1"  runat= "server" >  
  30.     普通用户登录界面省略<br />  
  31.   <asp:Button ID="Button1"  runat= "server"  OnClick= "Button1_Click"  Text= "普通用户登录"  />  
  32.   </form>  
  33. </body>  
  34. </html>  

这个文件将验证信息保存后,返回最初的请求页面。注意:这里连接数据库验证用户名和密码的过程省略过去了。

AdminLogin.aspx这个文件的全部内容如下:

  1. <%@ Page Language= "C#"  %>  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  3.  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >  
  4. <mce:script runat="server" ><!--  
  5.   protected   void  Button1_Click( object  sender, EventArgs e)  
  6.   {  
  7.     //密码验证过程在此省略,假如用户名是Admin,密码是mengxianhui   
  8.     FormsAuthenticationTicket ticket = new  FormsAuthenticationTicket(2, //票证的版本号   
  9.         "Admin" , //与身分验证票关联的用户名   
  10.         DateTime.Now, //票证发出时的本地日期和 时间   
  11.         DateTime.Now.AddHours(1),//票证过期的本地日期和时间   
  12.         true , // 如果票证存储在持久性cookie中(跨浏览器会话保存)则为 true 否则为false 如果票证储存在 URL中,将忽略此值   
  13.         "admin|manager|editor" , //储存在票证中持定的用户信息,本页面供 admin,manager,editor登录使用   
  14.         FormsAuthentication.FormsCookiePath //票证储存在cookie中的路径   
  15.     );  
  16.     //如果 forms 元素的 protection 属性设置为 All 或 Encryption,则窗体身份验证 使用 Encrypt 方法对窗体身份验证票进行加密和签名。   
  17.     string  encTicket = FormsAuthentication.Encrypt(ticket);  
  18.     HttpCookie cookie = new  HttpCookie(FormsAuthentication.FormsCookieName, encTicket);  
  19.     Response.Cookies.Add(cookie);  
  20.     Response.Redirect(FormsAuthentication.GetRedirectUrl("Admin" true ));  
  21.   }  
  22. // --></mce:script>   
  23. <html xmlns="http://www.w3.org/1999/xhtml" >  
  24. <head runat="server" >  
  25.   <title>孟宪会之多用户登录测试页面</title>  
  26. </head>  
  27. <body>  
  28.   <form id="form1"  runat= "server" >  
  29.   管理员登录界面,省略  
  30.   <asp:Button ID="Button1"  runat= "server"  Text= " 登  录 "  OnClick= "Button1_Click"  />  
  31.   </form>  
  32. </body>  
  33. </html>  

注意:这里连接数据库验证用户名和密码的过程省略过去了。


3,在Global的AuthenticateRequest 事件(一定要注意:不是 AuthorizeRequest 事件)里将角色信息附加到当前用户的上下文中。

  1. protected   void  Application_AuthenticateRequest( object  sender, EventArgs e)  
  2. {  
  3.   string  cookieName = FormsAuthentication.FormsCookieName;  
  4.   HttpCookie authCookie = Context.Request.Cookies[cookieName];  
  5.   if  ( null  == authCookie)  
  6.   {  
  7.     return ;  
  8.   }  
  9.   FormsAuthenticationTicket authTicket = null ;  
  10.   try   
  11.   {  
  12.     authTicket = FormsAuthentication.Decrypt(authCookie.Value);  
  13.   }  
  14.   catch  (Exception ex)  
  15.   {  
  16.     return ;  
  17.   }  
  18.   if  ( null  == authTicket)  
  19.   {  
  20.     return ;  
  21.   }  
  22.        
  23.   FormsIdentity id = new  FormsIdentity(authTicket);  
  24.   String[] roles = id.Ticket.UserData.Split('|' );  //读出在登录时设 置的角色列表。   
  25.   System.Security.Principal.GenericPrincipal principal = new  System.Security.Principal.GenericPrincipal(id, roles);  
  26.   Context.User = principal;//将验证信息 附加到当前用户上下文。   
  27. }  

4,在web.config文件中,允许登录文件的匿名访问,以便在未登录的情况下显示登录界面,注意:如果包含图片、css等文件,也需要设置这 些资源允许匿名访问。

  1. < configuration >   
  2.   < location   path = "AdminLogin.aspx" >   
  3.     < system.web >   
  4.       < authorization >   
  5.         < allow   users = "?" />   
  6.       </ authorization >   
  7.     </ system.web >   
  8.   </ location >   
  9.   < location   path = "UserLogin.aspx" >   
  10.     < system.web >   
  11.       < authorization >   
  12.         < allow   users = "?" />   
  13.       </ authorization >   
  14.     </ system.web >   
  15.   </ location >   
  16.     < system.web >   
  17.       < authentication   mode = "Forms" >   
  18.         < forms   loginUrl = "Login.aspx"   path = "/"   protection = "Encryption" > </ forms >   
  19.       </ authentication >   
  20.       < authorization >   
  21.         < deny   users = "?" />   
  22.         < allow   users = "*" />   
  23.       </ authorization >   
  24.     </ system.web >   
  25. </ configuration >   

5,这样,当访问admin文件夹下的内容时,会直接转到AdminLogin.aspx界面。在登录之后,就可以在/Admin/文件夹下的页面 中使用下面的方法得到当前登录的用户名和所具有的角色,根据角色来判断当前用户是否有权操作:

  1. Response.Write( "<li>当前登录用户 = "  + Page.User.Identity.Name);  
  2. Response.Write("<li>admin = "  + Page.User.IsInRole( "admin" ));  
  3. Response.Write("<li>reader = "  + Page.User.IsInRole( "reader" ));  

为了简单起见,可以写一个Admin使用的基类页面,统一在基类页面中进行权限的处理。

分享到:
评论

相关推荐

    asp.net使用Form认证实现用户登录

    在这个例子中,`asp.net使用Form认证实现用户登录 (LoginView的使用).pdf`文件很可能详细介绍了如何配置`LoginView`控件,以及如何结合Form认证来实现用户登录功能。文件可能涵盖了设置控件属性、处理登录事件、以及...

    asp.net 后台管理系统界面

    在这个“asp.net 后台管理系统界面”中,我们主要关注的是如何利用 ASP.NET 来设计和实现一套功能完善的后台管理界面。 后台管理系统界面是网站或应用程序的核心部分,它提供了管理员对数据、用户、权限等进行管理...

    asp.net实现 用户管理系统

    在本文中,我们将深入探讨如何使用ASP.NET(C#)技术来实现一个用户管理系统。ASP.NET是Microsoft开发的一个强大且灵活的Web应用程序框架,它允许开发者构建动态、数据驱动的Web应用。C#是一种现代、面向对象的编程...

    简单登录界面代码asp.net

    在这个场景中,我们看到的是一个简单的用户登录界面的实现,它涉及到HTML、CSS、JavaScript以及后端的ASP.NET代码。 首先,我们来看HTML部分,这是用户在浏览器中看到的界面。HTML代码定义了一个表单,包含了两个...

    ASP.NET登陆程序

    ASP.NET登录程序是基于微软的ASP.NET框架构建的Web应用程序,用于实现用户的身份验证和授权。这个程序的核心功能包括用户注册和登录,涉及到的关键技术主要包括ASP.NET Web Forms、页面生命周期管理、视图状态、...

    asp.net角色管理实例

    在本实例中,我们将深入探讨ASP.NET的角色管理机制,以及如何在实际项目中实现这一功能。 首先,ASP.NET的角色管理涉及到两个主要概念:认证(Authentication)和授权(Authorization)。认证是指识别用户的身份,...

    asp.net登录界面

    在"asp.net登录界面"这个主题中,我们将深入探讨如何使用ASP.NET来设计和实现一个用户登录系统。 一、ASP.NET登录基础 1. **Web表单与控件**:在ASP.NET中,登录界面通常由Web表单(.aspx页面)构成,包含文本框...

    asp.net用户注册代码

    在ASP.NET中,常常使用SQL Server或SQLite作为后台数据库。 5. **身份管理**:ASP.NET Identity 是一个用于用户身份验证和授权的框架,它可以处理用户的注册、登录、密码重置等功能。在用户注册时,Identity会处理...

    asp.net 角色权限管理系统

    通过深入学习这个ASP.NET角色权限管理系统,你可以掌握如何构建安全的多用户应用,理解如何有效地实现用户登录、角色分配和权限控制,这对于开发企业级应用至关重要。同时,这也有助于提高你对ASP.NET框架和身份验证...

    ASP.NET用户登录

    在ASP.NET中,这通常通过使用C#编程语言和ASP.NET Web Forms(ASPX)来实现。下面我们将深入探讨这个过程中的关键知识点。 1. **用户身份验证**: 用户身份验证是登录系统的核心,它涉及到检查用户提供的凭证是否...

    Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    5. **授权机制**:使用ASP.NET MVC的特性如[Authorize]或自定义授权过滤器,限制特定控制器或动作方法的访问,只有具备相应角色的用户才能执行。 6. **界面设计**:使用BootStrap创建用户界面,展示用户信息、角色...

    ASP.net用户登录注册完整模块

    ASP.NET用户登录注册模块是Web开发中不可或缺的一部分,它为网站提供身份验证和授权功能,确保只有经过验证的用户才能访问特定的受保护资源。在这个模块中,我们通常会涉及以下核心知识点: 1. **ASP.NET架构**:...

    asp.net简单用户登录系统

    在这个"asp.net简单用户登录系统"中,我们将探讨如何利用ASP.NET的核心技术和组件来实现一个基本的用户登录功能,包括用户验证、会话管理以及页面跳转。 1. **用户验证**:用户登录系统的首要任务是对用户输入的...

    ASP.NET源码——asp.net权限管理系统Demo源码.zip

    4. **页面/操作级别的授权**:在ASP.NET中,可以使用特性(Attributes)来标记控制器或行动方法,限制只有特定角色或用户才能访问。 5. **数据库交互**:权限信息通常存储在数据库中,如AspNetUsers、AspNetRoles和...

    ASP.NET+MVC+创建用户权限管理范例程序源码

    在ASP.NET中,我们可以使用`Roles`类来管理角色,包括添加、删除角色以及将用户分配到特定角色。通过角色,我们可以方便地批量授予或撤销用户集中的权限。 4. **权限分配**:在用户权限管理中,权限通常定义为对...

    ASP.NET做的用户注册界面

    综上所述,"ASP.NET做的用户注册界面"涵盖了前端交互、后端处理、数据验证、数据库操作、安全性实践以及用户体验等多个方面,是Web开发中的核心技能之一。通过掌握这些知识点,开发者可以构建出高效、安全的用户注册...

    ASP.NET 实现的博客系统

    3. **身份验证与授权**:为了管理用户登录和权限,博客系统可能会实现ASP.NET的身份认证和授权机制。这包括使用Forms Authentication,通过Cookie管理用户会话,以及角色基础的访问控制,确保只有特定用户能访问某些...

    用户登录举例 源代码asp.net

    在ASP.NET中,用户登录是Web应用程序的基本功能之一,它涉及到身份验证、授权以及安全性的管理。本例“用户登录举例”提供了多种编程语言的登录源代码,这将有助于开发者理解并实现自己的登录系统。 首先,ASP.NET...

    asp.net用户登录/管理模块使用vs和sql2005开发语言c#

    【ASP.NET用户登录/管理模块】是基于微软的.NET框架,使用Visual Studio 2005集成开发环境和C#编程语言,与SQL Server 2005数据库结合实现的一个功能组件。该模块主要涉及以下几个核心知识点: 1. **ASP.NET基础**...

    基于ASP.NET的安全登录系统的实现

    本文将深入探讨ASP.NET的安全体系结构,登录验证流程,以及页面请求流程,并详细介绍加密模块的实现方法。 ### ASP.NET安全体系结构 ASP.NET的安全体系结构主要基于身份验证(Authentication)和授权...

Global site tag (gtag.js) - Google Analytics