ibcadmin 发表于 2012-12-6 13:59:23

ASP.NET安全机制(五)基于数据库的安全机制

在实际开发中,权限相关信息应该存储在数据库之中,从而提高系统的安全性,上面几个小节主要介绍了ASP.NET安全机制的相关操作,本节将结合Sql Server 2005完善ASP.NET安全机制,是系统更加健壮。        本节使用的权限表Roles和用户表Users的表结构如下:
列名描述
Id角色编号
RoleName角色名称
表2Roles表
列名描述
Id用户编号
UserName用户名
Pwd用户密码
RoleID角色编号,外键引用Roles表Id列
表3Users表
结合数据库实现ASP.NET权限控制的大体步骤如下:1. 使用VS2008创建网站“RolesManager”。2. 在网站根目录创建Login.aspx页面、Admin文件夹和Common文件夹。3. 分别在两个文件夹中添加web.config,并按照下图所示添加相应权限控制语句。4. 分别在两个文件夹中添加Default.aspx页面,输出登陆成功提示信息。5. 接收用户在页面上输入的用户名和用户密码,形成检索数据库的SQL语句。6. 如果用户信息输入正确,检索数据库获得该用户名对应的角色ID。7. 通过角色ID,检索数据库获得该角色ID对应的角色名称。8. 利用Roles类将该登录帐户的用户名和角色名添加到系统中保存起来。9. 利用Roles类将当前角色与web.config配置信息进行对比达到权限控制的目的。



        分析上图不难得出结论:具有Admin角色的用户(小强)能访问Admin文件夹及Common文件夹下的资源,具有Common角色用户(water)仅能访问Common文件夹下的资源 。Roles类可以管理角色中的用户成员资格,以便在 ASP.NET 应用程序中进行授权检查。                Roles类的常用方法如下所示:       
名称描述
AddUserToRole将指定的用户添加到指定的角色中。
CreateRole将新的角色添加到数据源。
DeleteRole从数据源移除指定角色。
GetAllRoles获取应用程序的所有角色,返回string[]。
GetUsersInRole获取指定用户所属角色,返回string[]。
IsUserInRole获取指定用户是否属于指定角色的值,返回bool。
RoleExists判断指定的角色名称是否已存在于角色数据源中,返回bool。
表4Roles类的常用方法
提示使用Roles类进行权限控制,需要在web.config文件中加入<roleManager enabled="true"></roleManager>节点。
代码演示: 结合数据库完善ASP.NET安全机制protected void Button1_Click(object sender, EventArgs e)
{
    //用户输入的用户名
    string name = this.TextBox1.Text;
    //用户输入的密码
    string pwd = this.TextBox2.Text;
    //权限名称
    string role = "";
    //形成数据库检索语句
    string sql = "select * from users where userName='" + name + "' and pwd='" + pwd + "'";
    //获得用户信息
    DataTable dt = SQLHelper.GetData(sql);
    //判断用户名是否存在
    if (dt.Rows.Count == 0)
    {
      return;
    }
    //获得该用户的权限编号
    int roleId = Convert.ToInt32(dt.Rows);
    string s = "select * from roles where id=" + roleId;
    //获得权限信息
    DataTable dtRole = SQLHelper.GetData(s);
    //判断权限信息是否存在
    if (dtRole.Rows.Count == 0)
    {
      return;
    }
    //获得权限名称
    role = dtRole.Rows as string;
    //在系统数据库中标识当前登录的用户名及对应的角色
    if (Roles.RoleExists(role) == false)   ①
    {
      Roles.CreateRole(role);    ②
    }
    if (Roles.IsUserInRole(name, role) == false)
    {
      //将name用户标识为角色role
      Roles.AddUserToRole(name, role);
  }
  //添加票证
  System.Web.Security.FormsAuthentication.SetAuthCookie(name, false);
    //跳转到原页面
   Response.Redirect(FormsAuthentication.GetRedirectUrl(name,false));
}


代码解析:① Roles类是ASP.NET管理用户角色类,有验证角色资格、创建角色等方法。由Roles类创建的角色可以与web.config配置节进行对比,从而实现权限控制。② Roles类的创建角色方法。保存上面代码,运行后效果图下图所示:





至此ASP.NET安全机制全部讲解完毕,此经个人整理,转载请注明出处:IBC编程社区-C#论坛 www.ibcibc.com
页: [1]
查看完整版本: ASP.NET安全机制(五)基于数据库的安全机制