论文部分内容阅读
摘要:以H-H销售系统的研究和开发为背景,针对用户权限的安全问题,对B/S模式下系统用户权限管理的需求进行了分析,采用基于角色的安全管理策略进行了系统功能和业务流程的设计,并采用ASP.NET等技术实现了系统用户权限的静态和动态两种不同的管理模式,并在应用和性能上进行了比较。
关键词:ASP.NET;角色;权限管理
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)31-0896-02
The Comparison of Two Different Authority Management Methods on the Base of ASP.NET
ZHU Yao-qin
(Qindao Huanghai Vocational College, Qingdao 266427, China)
Abstract: Taking the research and development of H-H Distribution System as background, aiming at the safety problem of user's authority, this essay analyses the requirement of system user's authority management under the B/S mode. The author designed the system function and operation procedure with adopting the safety management strategy on the base of role, and realized the two different management modes of system user's authority including static state and dynamic with adopting the ASP.NET tech., and made comparison on the application and capability.
Key words: ASP.NET; role; authority management
1 基本原理
在系统中,一般而言,一个权限就是一个对单个或多个目标特定模式的访问的正式批准。权限通常是肯定的,在系统中表示拥有权限去实行某些行动。权限的本质取决于一个系统实现的细节和具体系统的情况。在一般的访问控制模型中,往往将权限作为一个不加以解释的符号。权限管理需要将权限进行划分以对应它自己的资源,将权限进一步的分割以方便系统保护它里面每一个抽象的目标,并且方便将权限赋予角色。角色可以认为是单个或者一组用户在一个组织中用来实行的一组操作。可以将角色看作一组用户的集合加上一组操作权限的集合。角色管理的任务就是要定义这样的集合,然后将这些集合分配给合适的用户。在许多访问控制系统中,用户组通常作为访问控制的一种单位。管理信息系统必然要描述使用这个系统的单位的组织形态,因为它一定是被应用到一定规模的组织中的。而用户的工作划分一般按照该用户所在部门的岗位或者所在工作组的角色来确定的,因此,抽象出用户的客观组织对象,并融入访问控制模型中,能够极大的丰富模型的表现能力,并使得系统与客观情况相吻合,符合用户的使用习惯。
一般的组织形态结构中,往往存在三种组织形态:按照职能划分的横向组织形态、按照任务(或者项目,产品等)划分的纵向组织形态和将两者结合起来的矩阵式组织形态,其中矩阵式组织形态又分为弱矩阵,平衡矩阵和强矩阵三种形态。矩阵的行和列分别表示系统的角色和系统的功能点,矩阵行列的交汇点表示当前的角色对于当前的功能是否有使用的权限。
2 需求分析
H-H销售系统是一个复杂的企业级应用,区域的划分和岗位职能的划分都非常的细致复杂。一方面是区域的划分。从总部的管理向下分大区,办事处,经销商。属于不同区的用户只能看到本地区的资料和数据。比如属于东北区的办事处就不可能看到华东区所属办事处的设置情况,更看不到其他办事处的经营情况。而北区的不同的两个办事处工作人员也不可能看到彼此的部门的经营情况。另一方面用户属于不同的岗位级别的划分。不同岗位工作人员需要查看和操作不同的资料和数据。比如办事处的员工只能输入合同基本数据,但是不能查看和修改合同的价格、扣点等重要数据。总部的管理人员也划分岗位,各个岗位的人员只能管理本岗位的数据。为了实现用户的权限管理用户权限的控制具体到每一个页面,有的甚至是页面上一个按钮。
3 总体设计
ASP.NET 所具有的表现层,业务逻辑层和数据访问层的三层架构,使页面代码与逻辑处理代码与访问数据库的代码相互分开并且相互透明。
此系统的所有访问控制和权限控制基本上是通过软件界面来实现的,通过对界面的控制来控制主体对客体的访问。在系统中对界面的表现要求主要有两种:软件界面元素的可见性和可访问性;软件界面数据集合的可见性和可操作性。即将用户按总部和办事处分角色,总部可以看到全体办事处的信息,而办事处只能看到自己办事处的相关信息。这就要求在绑定DataGrid和DropdownList时按用户的角色绑定不同的数据。并且有些管理和维护的页面是总部的管理维护人员才能访问的。由于办事处区分经理和工作人员,总部还区分各个岗位工作人员和管理人员。各种岗位对页面控件以及数据的可见性要求不一,对按钮的操作也不近相同。
图1是用户登录系统和进入页面的处理流程。其中用户登录判断用户表中用户名和密码的匹配,成功就将用户名和用户所属部门存入Session保存。页面申请的是否登录判断是获取Session用户名的值判断是否为空,验证权限是判断用户表中权限字符串是否符合进入页面的规则。若允许进入页面则按照角色确定页面加载什么样的控件和数据。
在用户登录的同时在数据库的表中记录用户名,登录时间和登录机器的IP等基本信息以增加系统的安全性。用户每进入一个页面也相应的把页面名称记录下来,和用户登录信息一起作为系统维护的基本日志信息。
4 静态分配角色权限方式的实现
4.1 权限管理数据库设计
静态分配角色就是系统中的角色和各个角色的权限已经设定,一旦设计完成就不能更改。此种设计思想实现较简单。首先设计用户表和角色权限表。在用户表中设置权限编号和部门编号的外键。在权限表中事先定义好各个角色的名称和编号,编号按奇数递增排列以便于扩展。具体设计如表1、表2所示。
4.2 代码实现
在访问每个页面之前先从Session中取出在用户登录时就存储在Session中的用户的权限编号和用户编号。在专门判断权限的类中定义好了每个模块的页面可以访问的权限编号。程序只要调用权限判断类,并将模块编号和权限编号作参数传递,就可以判断此用户是否可以进入此页面。由于有些权限细化到一个页面还是不够具体,因此,在有些按钮(例如删除功能按钮,审核功能按钮)的操作前也要进行权限的判断。
由于权限是固定的,权限判断的函数很简单易写,并且代码量不大。只需要按模块分类再按照功能分类,目的是为了便于调用函数找到匹配的权限编号。找到编号后将传来的参数和权限类函数中的编号进行比较一致的就返回真,意味着可以操作,反之就返回假,弹出相应的提示框警告用户。但是这样作的坏处在于权限编号写入了权限判断函数,如果要更改是非常麻烦的。
5 动态权限管理方式的实现
毕竟在一个复杂的体统中运用不变的权限分配管理方式是非常危险的,因为在实际应用中,尤其是庞大的管理系统中,企业管理的调整和岗位权限的变动是频繁的并且复杂的。将权限矩阵固定的写在代码中的方法是不易于维护和扩展的。所以为了适应企业的业务复杂性和变动灵活性的要求我们不得不设计了可以灵活调整的动态权限管理方法。
5.1 数据库设计的改进
将权限设定成可以灵活修改的,就需要添加一个专门编辑权限的表叫做页面权限信息表,见表3。将所有页面和页面上需要设定的控件的信息都存在这个表中,每个用户的权限设置就以此表为基础。
表3中的页面名称保存每个在体统中出现的页面,分类字段为了便于分模块管理。有时一个页面对于权限来说还不够具体,有的涉及到功能按钮的隐藏,有的涉及到数据的隐藏。这种类型的页面就要用到更详细的字段来描述,详细信息分别存在按钮名称字段和表格名称、表格属性字段。
5.2 代码实现
将页面权限信息表即表3的信息绑定到权限信息管理页面中的DataGrid控件中,如图2。每个页面的权限复选框的选择情况组合,按位与的方法计算出的一位的字符即为此页面的权限信息。以每个页面的记录的自动编号作为位数,连接成权限字符串,存入用户描述表的权限编号字段中。
6 结论
经过在本系统中的比较,可以看出第二种动态分配权限的方法比静态的灵活自由的多,也非常易于扩展和维护,但是复杂程度更高了,用户设置错误或者页面权限信息表的数据有细微错误都能导致系统权限的错误。在上百个页面的权限管理系统中,这两种方法的运行速度几乎没有差别。但是在静态权限管理的基础上再修改权限是非常复杂而浩大的工程了。因此这种简单易用的方法可以用在小型的局部的权限管理简单明确的管理系统中。动态的权限管理方法适用于复杂的多变的,要求灵活调整的中型的管理系统中。
参考文献:
[1] Meier J D,Mackman A,Dunner M,et a1.Building Secure ASP.NET Applications:Authentication,Authorization,and Secure Communication[M].Microsoft patterns&practices,2002.
[2] (美)Marshall D.NET安全编程[M].余波,张立浩,译.北京:清华大学出版社,2003.
[3] (美)Platt DS.Microsoft.NET精髓[M].黄慧萍,芦阳,等译.北京:机械工业出版社,2003.
[4] (美) Damien Foggon,Daniel Maharry. ASP.NET 1.1数据库入门经典.杨浩,译.北京:清华大学出版社.
关键词:ASP.NET;角色;权限管理
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)31-0896-02
The Comparison of Two Different Authority Management Methods on the Base of ASP.NET
ZHU Yao-qin
(Qindao Huanghai Vocational College, Qingdao 266427, China)
Abstract: Taking the research and development of H-H Distribution System as background, aiming at the safety problem of user's authority, this essay analyses the requirement of system user's authority management under the B/S mode. The author designed the system function and operation procedure with adopting the safety management strategy on the base of role, and realized the two different management modes of system user's authority including static state and dynamic with adopting the ASP.NET tech., and made comparison on the application and capability.
Key words: ASP.NET; role; authority management
1 基本原理
在系统中,一般而言,一个权限就是一个对单个或多个目标特定模式的访问的正式批准。权限通常是肯定的,在系统中表示拥有权限去实行某些行动。权限的本质取决于一个系统实现的细节和具体系统的情况。在一般的访问控制模型中,往往将权限作为一个不加以解释的符号。权限管理需要将权限进行划分以对应它自己的资源,将权限进一步的分割以方便系统保护它里面每一个抽象的目标,并且方便将权限赋予角色。角色可以认为是单个或者一组用户在一个组织中用来实行的一组操作。可以将角色看作一组用户的集合加上一组操作权限的集合。角色管理的任务就是要定义这样的集合,然后将这些集合分配给合适的用户。在许多访问控制系统中,用户组通常作为访问控制的一种单位。管理信息系统必然要描述使用这个系统的单位的组织形态,因为它一定是被应用到一定规模的组织中的。而用户的工作划分一般按照该用户所在部门的岗位或者所在工作组的角色来确定的,因此,抽象出用户的客观组织对象,并融入访问控制模型中,能够极大的丰富模型的表现能力,并使得系统与客观情况相吻合,符合用户的使用习惯。
一般的组织形态结构中,往往存在三种组织形态:按照职能划分的横向组织形态、按照任务(或者项目,产品等)划分的纵向组织形态和将两者结合起来的矩阵式组织形态,其中矩阵式组织形态又分为弱矩阵,平衡矩阵和强矩阵三种形态。矩阵的行和列分别表示系统的角色和系统的功能点,矩阵行列的交汇点表示当前的角色对于当前的功能是否有使用的权限。
2 需求分析
H-H销售系统是一个复杂的企业级应用,区域的划分和岗位职能的划分都非常的细致复杂。一方面是区域的划分。从总部的管理向下分大区,办事处,经销商。属于不同区的用户只能看到本地区的资料和数据。比如属于东北区的办事处就不可能看到华东区所属办事处的设置情况,更看不到其他办事处的经营情况。而北区的不同的两个办事处工作人员也不可能看到彼此的部门的经营情况。另一方面用户属于不同的岗位级别的划分。不同岗位工作人员需要查看和操作不同的资料和数据。比如办事处的员工只能输入合同基本数据,但是不能查看和修改合同的价格、扣点等重要数据。总部的管理人员也划分岗位,各个岗位的人员只能管理本岗位的数据。为了实现用户的权限管理用户权限的控制具体到每一个页面,有的甚至是页面上一个按钮。
3 总体设计
ASP.NET 所具有的表现层,业务逻辑层和数据访问层的三层架构,使页面代码与逻辑处理代码与访问数据库的代码相互分开并且相互透明。
此系统的所有访问控制和权限控制基本上是通过软件界面来实现的,通过对界面的控制来控制主体对客体的访问。在系统中对界面的表现要求主要有两种:软件界面元素的可见性和可访问性;软件界面数据集合的可见性和可操作性。即将用户按总部和办事处分角色,总部可以看到全体办事处的信息,而办事处只能看到自己办事处的相关信息。这就要求在绑定DataGrid和DropdownList时按用户的角色绑定不同的数据。并且有些管理和维护的页面是总部的管理维护人员才能访问的。由于办事处区分经理和工作人员,总部还区分各个岗位工作人员和管理人员。各种岗位对页面控件以及数据的可见性要求不一,对按钮的操作也不近相同。
图1是用户登录系统和进入页面的处理流程。其中用户登录判断用户表中用户名和密码的匹配,成功就将用户名和用户所属部门存入Session保存。页面申请的是否登录判断是获取Session用户名的值判断是否为空,验证权限是判断用户表中权限字符串是否符合进入页面的规则。若允许进入页面则按照角色确定页面加载什么样的控件和数据。
在用户登录的同时在数据库的表中记录用户名,登录时间和登录机器的IP等基本信息以增加系统的安全性。用户每进入一个页面也相应的把页面名称记录下来,和用户登录信息一起作为系统维护的基本日志信息。
4 静态分配角色权限方式的实现
4.1 权限管理数据库设计
静态分配角色就是系统中的角色和各个角色的权限已经设定,一旦设计完成就不能更改。此种设计思想实现较简单。首先设计用户表和角色权限表。在用户表中设置权限编号和部门编号的外键。在权限表中事先定义好各个角色的名称和编号,编号按奇数递增排列以便于扩展。具体设计如表1、表2所示。
4.2 代码实现
在访问每个页面之前先从Session中取出在用户登录时就存储在Session中的用户的权限编号和用户编号。在专门判断权限的类中定义好了每个模块的页面可以访问的权限编号。程序只要调用权限判断类,并将模块编号和权限编号作参数传递,就可以判断此用户是否可以进入此页面。由于有些权限细化到一个页面还是不够具体,因此,在有些按钮(例如删除功能按钮,审核功能按钮)的操作前也要进行权限的判断。
由于权限是固定的,权限判断的函数很简单易写,并且代码量不大。只需要按模块分类再按照功能分类,目的是为了便于调用函数找到匹配的权限编号。找到编号后将传来的参数和权限类函数中的编号进行比较一致的就返回真,意味着可以操作,反之就返回假,弹出相应的提示框警告用户。但是这样作的坏处在于权限编号写入了权限判断函数,如果要更改是非常麻烦的。
5 动态权限管理方式的实现
毕竟在一个复杂的体统中运用不变的权限分配管理方式是非常危险的,因为在实际应用中,尤其是庞大的管理系统中,企业管理的调整和岗位权限的变动是频繁的并且复杂的。将权限矩阵固定的写在代码中的方法是不易于维护和扩展的。所以为了适应企业的业务复杂性和变动灵活性的要求我们不得不设计了可以灵活调整的动态权限管理方法。
5.1 数据库设计的改进
将权限设定成可以灵活修改的,就需要添加一个专门编辑权限的表叫做页面权限信息表,见表3。将所有页面和页面上需要设定的控件的信息都存在这个表中,每个用户的权限设置就以此表为基础。
表3中的页面名称保存每个在体统中出现的页面,分类字段为了便于分模块管理。有时一个页面对于权限来说还不够具体,有的涉及到功能按钮的隐藏,有的涉及到数据的隐藏。这种类型的页面就要用到更详细的字段来描述,详细信息分别存在按钮名称字段和表格名称、表格属性字段。
5.2 代码实现
将页面权限信息表即表3的信息绑定到权限信息管理页面中的DataGrid控件中,如图2。每个页面的权限复选框的选择情况组合,按位与的方法计算出的一位的字符即为此页面的权限信息。以每个页面的记录的自动编号作为位数,连接成权限字符串,存入用户描述表的权限编号字段中。
6 结论
经过在本系统中的比较,可以看出第二种动态分配权限的方法比静态的灵活自由的多,也非常易于扩展和维护,但是复杂程度更高了,用户设置错误或者页面权限信息表的数据有细微错误都能导致系统权限的错误。在上百个页面的权限管理系统中,这两种方法的运行速度几乎没有差别。但是在静态权限管理的基础上再修改权限是非常复杂而浩大的工程了。因此这种简单易用的方法可以用在小型的局部的权限管理简单明确的管理系统中。动态的权限管理方法适用于复杂的多变的,要求灵活调整的中型的管理系统中。
参考文献:
[1] Meier J D,Mackman A,Dunner M,et a1.Building Secure ASP.NET Applications:Authentication,Authorization,and Secure Communication[M].Microsoft patterns&practices,2002.
[2] (美)Marshall D.NET安全编程[M].余波,张立浩,译.北京:清华大学出版社,2003.
[3] (美)Platt DS.Microsoft.NET精髓[M].黄慧萍,芦阳,等译.北京:机械工业出版社,2003.
[4] (美) Damien Foggon,Daniel Maharry. ASP.NET 1.1数据库入门经典.杨浩,译.北京:清华大学出版社.