摘 要 本文依据rbac的基本思想,利用asp.net中的用户控件技术,设计了在电子商务系统中用户权限控制的一种具体实现方法。 关键词 asp.net 角色访问控制 用户控件 引言
电子商务系统对安全问题有较高的要求,传统的访问控制方法dac(discretionary access control,自主访问控制模型)、mac(mandatory access control,强制访问控制模型)难以满足复杂的企业环境需求。因此,nist(national institute of standards and technology,美国国家标准化和技术委员会)于90年代初提出了基于角色的访问控制方法,实现了用户与访问权限的逻辑分离,更符合企业的用户、组织、数据和应用特征。asp.net是微软为了抗衡jsp而推出的新一代asp(active server pages)脚本语言,它借鉴了jsp的优点,同时它又具有自身的一些新特点。
本文将首先介绍asp.net的基本情况和rbac(role based access control)的基本思想,在此基础上,给出电子商务系统中实现用户权限控制的一种具体方法。
asp.net是微软流行的动态web编程技术活动服务器网页(asp)的最新版本,但它远不是传统asp简单升级。asp.net和asp的最大区别在于编程思维的转换,asp.net是真正的面向对象(object-oriented),而不仅仅在于功能的增强。
在asp.net中,web 窗体页由两部分组成:视觉元素(html、服务器控件和静态文本)和该页的编程逻辑。其中每一部分都存储在一个单独的文件中。可视元素在一个扩展名为 .aspx 文件中创建,而代码位于一个单独的类文件中,该文件称作代码隐藏类文件扩展名为.aspx.vb 或 .aspx.cs。这样,.aspx文件中存放所有要显示的元素,aspx.vb或.aspx.cs文件中存放逻辑。
2、用户控件(usercontrol)
为了使用户能够根据需要方便地定义控件,asp.net引入了 web 窗体用户控件的概念。实际上,只要将.aspx稍作修改即可转换为 web 用户控件,扩展名为 .ascx,.ascx和.aspx文件一样也有一个存放逻辑的代码隐藏类文件,扩展名为.ascx.vb或.ascx.cs,只是它不能作为独立 web 窗体页来运行,只有当被包含在 .aspx文件中时,用户控件才能工作。
通过以下两个步骤在web窗体页中设置用户控件:
(1)使用@ register指令在.aspx文件中注册用户控件。如要注册在放在相对路径“../usercontrol/”下的头文件headinner.ascx的方法为:
<%@ register tagprefix="acme" tagname="head" src="../usercontrol/headinner.ascx" %>
(2)在服务器控件的开始标记和结束标记之间(<form runat=server> </form>) 声明该用户控件元素。例如要声明上面所导入的控件的语法为:
<acme: head runat="server"/>
这样,该控件就成为页的一部分,并将在处理该页时呈现出来。并且,该控件的公共属性、事件和方法将向 web 窗体页公开并且可以通过编程来使用。根据这个原理,就可以将每个页面初始化时所要执行的操作(如登录验证,角色验证)封装在用户控件当中。
rbac的基本思想
rbac(角色访问控制)的基本思想可简单地用图1来表示,即把整个访问控制过程分成两步:访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离。
由于rbac实现了用户与访问权限的逻辑分离,因此它极大的方便了权限管理。例如,如果一个用户的职位发生变化,只要将用户当前的角色去掉,加入代表新职务或新任务的角色即可,角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多,并且委派用户到角色不需要很多技术,可以由行政管理人员来执行,而配置权限到角色的工作比较复杂,需要一定的技术,可以由专门的技术人员来承担,但是不给他们委派用户的权限,这与现实中情况正好一致。
用户权限在.net中的设计与实现
利用.net中的用户控件实现权限控制的基本思想是:根据角色访问控制(rbac)的基本原理,给用户分配一个角色,每个角色对应一些权限,然后利用asp.net中的用户控件(usercontrol)来判断该用户对应的角色是否对访问页面有访问的权力。
下面将从数据库设计、添加角色和用户控件的使用等三方面来阐述具体实现过程。
1、数据库中表的设计
首先,在数据库中设计功能模块表、功能表和角色表等三个表。
(1) 功能模块表
为了管理好用户的权限,首先要组织好系统的模块,为此设计了一个功能模块表。见表1。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器