asp.net用户角色管理

      大部分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

posted @ 2009-12-09 14:27  Javan  阅读(913)  评论(3编辑  收藏  举报