asp.net用户角色管理简述

感谢:http://kb.cnblogs.com/a/1620282/

 

大部分web系统均有用户角色管理,根据用户的角色(权限)允许或拒绝用户访问某个页面,在这我实现了一个管理三类用户的Demo,游客无访问权 限,管理员(角色为manger)登录后可访问manger文件夹下的aspx页面,普通用户(角色为member)登录后可访问member文件夹夹下 了文件。

      1、数据库为SQL Server2005,数据库名:UsersManger,数据表Users。

在web.config中配置连接字符串

1  < connectionStrings >
2     < add  name ="strConn"  connectionString ="Server=(local);DataBase=UsersManger;Integrated Security=SSPI;" />
3    </ connectionStrings >

 

数据表截图

 

     2、解决方案的结构截图

 


 

 

大家可能对ASPNETDB.mdf数据库文件感到疑问,这是微软的实例数据之一,如果在系统中使用成员管理、角色管理等,这个数据库会自动添加到系统App_Data文件夹下。

      3、在web.config文件中配置用户访问权限

使用Roles类实现用户角色功能时,首先需要在system.web配置节下设置允许使用用户角色管理:

 

< roleManager  enabled ="true"  cacheRolesInCookie ="true" />

    (1)拒绝匿名用户即游客访问网站,如果访问跳转到Login.aspx登录页,在system.web配置节下设置:

 

代码
< authentication  mode ="Forms" >
   
< forms  defaultUrl ="Default.aspx"  loginUrl ="Login.aspx"  name =".APSXAUTH"  protection ="All"  timeout ="60" ></ forms >
  
</ authentication >
  
< authorization >
   
< deny  users ="?" />
  
</ authorization >

    (2)下面的配置内容表示只有在角色为manger的用户登录后才能访问manger文件下的aspx页面。

< location  path ="manger" >
    
< system.web >
      
< authorization >
        
< allow  roles ="manger" />
        
< deny  users ="*" />
      
</ authorization >
    
</ system.web >
  
</ location >

     (3)下面的配置内容表示只有在角色为member的用户登录后才能访问manger文件下的aspx页面。

< location  path ="member" >
    
< system.web >
      
< authorization >
        
< allow  roles ="member" />
        
< deny  users ="*" />
      
</ authorization >
    
</ system.web >
  
</ location >
 
< system.web >

       4、登录页Login.aspx页面源码

代码
<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Login.aspx.cs "  Inherits = " Login "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > 用户登录 </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< div >
        用户名:
< asp:TextBox  ID ="txtUserName"  runat ="server" ></ asp:TextBox >
        
< br  />
        
< br  />
        密
&nbsp;&nbsp;&nbsp;  码: < asp:TextBox  ID ="txtUserPassword"  runat ="server"
            TextMode
="Password" ></ asp:TextBox >
        
< br  />
        
< br  />
        用户类型:
< asp:DropDownList  ID ="ddlUserRole"  runat ="server" >
            
< asp:ListItem  Selected ="True"  Value ="selectRole" > 请选择 </ asp:ListItem >
            
< asp:ListItem  Value ="manger" > 管理员 </ asp:ListItem >
            
< asp:ListItem  Value ="member" > 普通用户 </ asp:ListItem >
        
</ asp:DropDownList >
        
< br  />
        
< br  />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        
< asp:Button  ID ="btnLogin"  runat ="server"  onclick ="btnLogin_Click"  Text ="登录"   />
    
</ div >
    
</ form >
</ body >
</ html >

 

       5、单击登录按钮事件代码在(Login.aspx.cs)中

进行数据库操作,导入命名空间:

 

代码
using  System.Data.SqlClient;

protected   void  btnLogin_Click( object  sender, EventArgs e)
    {
        
string  UserName  =  txtUserName.Text.Trim().ToString();
        
string  UserPassword  =  txtUserPassword.Text.Trim().ToString();
        
string  UserRole  =  ddlUserRole.SelectedItem.Value.ToString();
        SqlConnection Conn 
=   new  SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[ " strConn " ].ToString());
        Conn.Open();
        
string  sqlLogin  =   " select count(*) from Users where UserName=' "   +  UserName  +   " ' and UserPassword=' "   +  UserPassword  +   " ' " ;
        
if  (UserRole  ==   " manger " ) // 如果选择管理员
        {
            sqlLogin 
+=   " and UserRole=' "   +  UserRole  +   " ' " ;
            SqlCommand Cmd 
=   new  SqlCommand(sqlLogin, Conn);
            
int  result  =  Convert.ToInt32(Cmd.ExecuteScalar());
            
if  (result  >   0 ) // 管理员用户存在
            {
                
if  (Roles.RoleExists(UserRole)) // 判断该用户角色是否已经存在
                {
                    FormsAuthentication.RedirectFromLoginPage(UserName, 
false ); // 登录主页或跳转到刚刚请求的页面
                }
                
else
                {
                    Roles.CreateRole(UserRole);
// 该用户还没创建角色,则创建该角色
                    Roles.AddUserToRole(UserName, UserRole); // 添加该用户到指定的角色
                    FormsAuthentication.RedirectFromLoginPage(UserName,  false ); // 登录主页或跳转到刚刚请求的页面
                }
            }
            
else
            {
                Response.Write(
" 用户名或密码错误! " );
            }
            Conn.Close();
        }
        
else   if  (UserRole  ==   " member " )
        {
            sqlLogin 
+=   " and UserRole=' "   +  UserRole  +   " ' " ;
            SqlCommand Cmd 
=   new  SqlCommand(sqlLogin, Conn);
            
int  result  =  Convert.ToInt32(Cmd.ExecuteScalar());
            
if  (result  >   0 )
            {
                
if  (Roles.RoleExists(UserRole))
                {
                    Roles.CreateRole(UserRole);
                    Roles.AddUserToRole(UserName, UserRole);
                    FormsAuthentication.RedirectFromLoginPage(UserName, 
false );
                }
                FormsAuthentication.RedirectFromLoginPage(UserName, 
false );
            }
            
else
            {
                Response.Write(
" 用户名或密码错误! " );
            }
            Conn.Close();
        }
    }

 

        6、其他页面基本上没有什么内容,只是用于测试,其中登录还有一些因素需要考虑,这里主要是说明如何使用Forms验证并结合Roles用户角色管理类来实现角色管理。

        这是我做的一个用户角色管理的Demo,希望对学习asp.net的朋友有所帮助,如果有什么问题或更好的解决方案,大家可以交流交流。

       Demo下载地址 :asp.net用户角色管理   运行环境:vs2008+Sql Server2005

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值