马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

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

[复制链接]
查看4944 | 回复0 | 2012-12-6 13:59:23 | 显示全部楼层 |阅读模式
在实际开发中,权限相关信息应该存储在数据库之中,从而提高系统的安全性,上面几个小节主要介绍了ASP.NET安全机制的相关操作,本节将结合Sql Server 2005完善ASP.NET安全机制,是系统更加健壮。
        本节使用的权限表Roles和用户表Users的表结构如下:
列名
描述
Id
角色编号
RoleName
角色名称
2  Roles
列名
描述
Id
用户编号
UserName
用户名
Pwd
用户密码
RoleID
角色编号,外键引用RolesId
3  Users
结合数据库实现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配置信息进行对比达到权限控制的目的。

图片2.png

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



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

图片3.png



至此ASP.NET安全机制全部讲解完毕,此经个人整理,转载请注明出处:IBC编程社区-C#论坛 www.ibcibc.com
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则