asp.net用户角色管理

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

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

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

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

asp.net用户角色管理 - star - 教育技术
 2、解决方案的结构截图

asp.net用户角色管理 - star - 教育技术

大家可能对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" οnclick="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的朋友有所帮助,如果有什么问题或更好的解决方案,大家可以交流交流。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值