基于面向对象的权限管理系统设计与实现[1]

时间:2022-12-10 09:03:27

 基于面向对象的权限管理系统设计与实现[1]
2007-9-20 作者:王如龙  网友评论 0 条 点击进入论坛

  摘要:针对大型计算机应用系统对权限管理的要求,提出了采用面向对象技术,实现权限管理的思想,介绍了权限管理系统中数据库设计与程序设计的方法与技术。

  1. 引言

  随着计算机应用领域的不断扩展和计算机使用部门与人员的不断普及,使大型计算机应用系统的使用权限和系统权限管理的设计与实现成为人们关注的焦点。每一个较成熟的大型管理信息系统一定有一个权限管理系统来支撑,通过该系统严格分配进入系统的用户的使用范围与操作权限,以保证系统操作的安全性和合法性。

  由于权限的分配不仅要求指定到任何一级菜单,而且要求定义到具体的窗口,甚至指定到一个窗口的某个按钮上。而不同的应用系统,对使用权限的控制要求是不同的,针对以上问题,研究权限管理的基本规律,采用面向对象的软件设计方法来实现通用权限管理系统,是本文要解决的问题。

  2. 系统主要设计思想

  众所周知,应用系统面向最终用户的操作界面,都是由一个个的窗口构成。因此,我们定义两个基本类,一个是业务窗口基本类:TChildForm,在这个基类里,我们实现如下的几个过程:定义基本的窗口界面:SetDisplayStyle,捕获窗口不可操作的控件:HandControlsAuthrity。那么只要继承于TchildForm类型的窗口,我们都可以控制其窗口上的所有控件。假设应用程序之间的继承关系是图一的一种方式。主窗口的继承关系为图二的一种方式。主窗口基类里必须有一个过程,即设置菜单权限。

  应用系统主要包括两种形式的主要窗口,只要具体的业务窗口继承于以上两类窗口,就能够实体对窗口上的菜单、按钮、组合框等的统一控制。

  基于面向对象的权限管理系统设计与实现[1]

  我们采用数据库定义与面向对象编程方法来实现通用权限管理,重点考虑两点。

  (1)建立权限管理数据库,对包括应用系统模块信息,系统功能菜单信息,系统权限定义信息、用户操作权限信息、权限角色信息等直接与系统操作类型与操作权限紧密相关的信息进行分类,并建立相应的数据基表。

  (2)应用系统模块都是通过继承某一个最基本的模块来实现其操作的,我们利用面向对象编程所具有的继承特性,通过子类对象继承父类对象的属性和方法,将实现权限控制的函数和过程写在一个最基本的父类里,来实行操作权限的管理。

基于面向对象的权限管理系统设计与实现[1]
2007-9-20 作者:王如龙  网友评论 0 条 点击进入论坛

  摘要:针对大型计算机应用系统对权限管理的要求,提出了采用面向对象技术,实现权限管理的思想,介绍了权限管理系统中数据库设计与程序设计的方法与技术。

  1. 引言

  随着计算机应用领域的不断扩展和计算机使用部门与人员的不断普及,使大型计算机应用系统的使用权限和系统权限管理的设计与实现成为人们关注的焦点。每一个较成熟的大型管理信息系统一定有一个权限管理系统来支撑,通过该系统严格分配进入系统的用户的使用范围与操作权限,以保证系统操作的安全性和合法性。

  由于权限的分配不仅要求指定到任何一级菜单,而且要求定义到具体的窗口,甚至指定到一个窗口的某个按钮上。而不同的应用系统,对使用权限的控制要求是不同的,针对以上问题,研究权限管理的基本规律,采用面向对象的软件设计方法来实现通用权限管理系统,是本文要解决的问题。

  2. 系统主要设计思想

  众所周知,应用系统面向最终用户的操作界面,都是由一个个的窗口构成。因此,我们定义两个基本类,一个是业务窗口基本类:TChildForm,在这个基类里,我们实现如下的几个过程:定义基本的窗口界面:SetDisplayStyle,捕获窗口不可操作的控件:HandControlsAuthrity。那么只要继承于TchildForm类型的窗口,我们都可以控制其窗口上的所有控件。假设应用程序之间的继承关系是图一的一种方式。主窗口的继承关系为图二的一种方式。主窗口基类里必须有一个过程,即设置菜单权限。

  应用系统主要包括两种形式的主要窗口,只要具体的业务窗口继承于以上两类窗口,就能够实体对窗口上的菜单、按钮、组合框等的统一控制。

  

  我们采用数据库定义与面向对象编程方法来实现通用权限管理,重点考虑两点。

  (1)建立权限管理数据库,对包括应用系统模块信息,系统功能菜单信息,系统权限定义信息、用户操作权限信息、权限角色信息等直接与系统操作类型与操作权限紧密相关的信息进行分类,并建立相应的数据基表。

  (2)应用系统模块都是通过继承某一个最基本的模块来实现其操作的,我们利用面向对象编程所具有的继承特性,通过子类对象继承父类对象的属性和方法,将实现权限控制的函数和过程写在一个最基本的父类里,来实行操作权限的管理。

  建立了上述基表之后,再建下列视图表,以利于系统程序的优化,提高可读性和系统性能。

  3.10系统操作视图

  CREATE VIEW AUTH_V_USERS_LOGIN (user_id, user_no, password,system_id, system_code) AS SELECT a.USER_ID, a.USER_NO, a.PASSWORD,b.SYSTEM_ID, b.SYSTEM_CODE FROM AUTH_USERS a, AUTH_SYSTEM b WHEREa.system_id = b.system_id

  3.11系统权限视图

  CREATE VIEW AUTH_V_USERSET (auth_id, system_id, auth_code,auth_name, form_name, parent_id, item_type, control_type, user_id,type) AS SELECT a.AUTH_ID, a.SYSTEM_ID, a.AUTH_CODE, a.AUTH_NAME,a.FORM_NAME, a.PARENT_ID, a.ITEM_TYPE, a.CONTROL_TYPE, b.USER_ID,b.TYPE FROM AUTH_ITEM a, AUTH_USERSET b WHERE a.auth_id = b.auth_id

  3.12角色权限视图

  CREATE VIEW AUTH_V_ROLESET (auth_id, system_id, auth_code,auth_name, form_name, parent_id, item_type, control_type, role_id) ASSELECT a.AUTH_ID, a.SYSTEM_ID, a.AUTH_CODE, a.AUTH_NAME, a.FORM_NAME,a.PARENT_ID, a.ITEM_TYPE, a.CONTROL_TYPE, b.ROLE_ID FROM AUTH_ITEM a,AUTH_ROLESET b WHERE a.auth_id = b.auth_id

  通过数据库的建立和数据的定义,对各系统的编号、名称,每个系统具有的用户,每个用户所拥有的角色,每个角色所拥有的操作权限进行了规定。这样当用户登录到某一个具体的子系统时,该用户是否合法,它具有哪些操作权限,都可以通过权限管理系统来进行控制。

  3.13系统程序设计

  通过数据库的设计,我们规定了每个用户所拥有的系统功能操作权限。在得到每个用户所有的系统功能权限以后,怎样控制其具体的菜单,甚至窗口中指定的控件,是权限管理系统要解决的另一个主要问题。根据每一个子系统均存在严格的继承关系这一特性,我们使用两个基类窗口来进行编程控制。

  3.14主窗口(TMainBaseForm)

  对主窗口,主要考虑控制菜单的可见性或可用性。在窗口引导的同时,执行以下几个过程:

  (1)ReadUserMenuAuthrity (Auth_ID,Systm_ID:string var Flist:TList):读取某一个子系统下,某一用户能够操作的菜单权限,并把权限存放在一个列表对象fList中。

  (2)ReadSubSystemMenu (System_ID:string;aList:TList):读取某一个子系统所有可以操作的菜单,并把它存放在列表对象aList中。

  (3)SetMenuEnableVisible (aList,Flist):根据取得的两种结果,循环比较,如果alist中的一个项在fList中找不到,则肯定此人不具有操作此菜单的权限,从而由3.1.2的控制类型控制其可用还是可见。

  3.15业务窗口(TChildForm)

  对业务窗口,在基类TchildForm里的引导事件中增加如下几个过程:

  (1)ReadUserControlAuthority (Userid,SystemId,AformName:string;varFlist:TList):读取某一个子系统、某一用户、某一窗口名下不能够操作的控件,并把它存放到对象Flist中。这里读取的是某一用户不能操作的控件对象,这样在定义这个用户的控件权限时也只要定义他的不能操作的控件。因为大部份控件对象肯定是可以操作的,所以定义不能操作的控件比定义可操作的控件要容易得多。

  (2)SetUserControlEnableVisible (UserID,SystemId,AformName:string):循环读取窗口下所有的控件对象并与Flist对象中的项比较,如果窗口对在Flist找到,说明该控件对象不可以操作或不可显示(由控制类型决定)。

  结束语

  通用权限管理解决了通过权限管理系统来控制大型应用系统中各子系统操作权限的问题。权限管理系统与大型应用系统是相对独立的两个系统,与传统的权限管理是子系统中的一个模块相比,它克服了系统权限定义复杂、管理控制繁琐、修改调整困难的弊端。

  通用权限管理系统可以对菜单一级的权限进行控制,还可以对窗口中所有可视控件进行控制,包括按钮、文本输入框、面板、标签等。进一步对受控系统可以进行增加,删除等数据库记录级的控制操作。系统还可以根据用户需要,对受控对象提供可视(Visible)、可用(Enable)两种方式的控制。

  根据本文讨论的设计思想和方法开发的通用权限管理系统,已在多个CIMS系统和ERP系统中得到成功应用。

  参考文献:

  1、 陈余年,方美琪.信息系统工程中的面向对象方法 北京:清华大学出版社,1999

  2、 王忠华,杨志刚.Delphi5.0程序设计 北京:中国铁道出版社,2000

  3、 [美] Jacquie Barker.Java 面向对象编程指南 北京:电子工业出版社,2000

  4、 王如龙.中铝广西分公司CIMS系统的开发与实施(企业信息化集成) 2003.9