本文拟结合powerbuilder语言,简述如何在传统c/s应用系统当中有效建立权限管理体系。
何谓权限管理体系?就是如何控制操作使用者对软件功能和系统数据的访问权限的各个方面。传统的c/s应用系统,多是“前台应用程序+后台数据库表”两部分,这样就决定了我们考虑权限管理体系就必然要考虑两方面的内容:
1、用户在前台的功能权限:即该用户能够使用哪些菜单或窗口功能,例如:张三只能使用数据录入功能,不能使用管理审批功能;
2、用户在后台的功能权限:即该用户能够对库表具有哪些读、取访问权限,例如:张三对于x_table表只有读权限,没有写权限;
是否上述两方面权限管理就足够了呢?答案是否定的,因为从应用角度来考虑,还需要对用户的数据访问权限进行控制,例如:张三属于a分局,李四属于b分局,张三、李四各录入一条数据,那么在查询时显然张三只能查询到其自己录入的数据记录,而不允许其查询到李四录入的数据记录,或者只能查询而不允许修改,因此这就引出了第三方面的权限管理内容:
3、用户在应用的数据访问权限:即该用户能够对哪些数据具有哪些访问权限;
下面我们逐一来了解如何实现上述三个方面的权限管理:
1、前台功能权限:
谈到前台功能权限,我们要建立下面几个概念:
岗位:是指用户具体负责的工作分类,如:数据录入岗、文书审批岗、系统维护岗等;
功能:是指用户能够使用的软件功能,可以通过菜单或窗口来控制,但由于一个系统当中窗口通常数据量庞大,控制用户使用哪些窗口不太实际,因此我们通常菜单控制即可;
工号:是指具体用户登录系统所用的用户id;
上述三个概念的相互关系如下:
一个岗位可以对应多个功能菜单;
一个功能菜单同样可以对应多个岗位;
一个工号只能属于一个岗位;
进而我们可以设计以下用户登录流程:
(1)用户id登录系统后读取对应用户表查看其所在岗位;
(2)查找该岗位对应可以使用哪些菜单;
(3)将用户能够使用的菜单和系统实际菜单逐一比较,屏蔽不允许其使用的菜单;
这里面由于涉及到菜单的遍历,需要使用到一些pb的使用技巧,详见另外一篇文章《浅谈如何利用pb实现动态添加菜单》,此处不再赘述。
这样通过上述三者关系,建立起一个用户工号到底能够使用哪些菜单,不能使用哪些菜单。为何要如此复杂,为何不直接定义每个工号能够使用哪些菜单呢?那样的话,显然系统冗余太大,造成资源浪费,不符合规范化要求。
2、后台库表权限:
后台库表权限主要是根据前台工号在后台数据库建立相应的帐号(login)、用户(user),并根据一定的规则产生对应密码,并赋予其不同的角色(role)、不同库表的不同读、写权限,由于这部分与所采用的后台具体数据库密切相关,因此本文不再详述。
3、应用数据权限:
应用数据权限的实现,主要通过各类数据表当中必须引入数据记录的录入或产生单位代码和操作员工号id,当用户访问相应记录时,首先比较当前用户id及其所在单位,是否与数据记录的产生操作员id及其单位代码一致,这个问题说起来简单,但实际用pb语言实现起来需要讲究一定技巧,要充分借助“继承”这一特性,尽量高效、通用。
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 注册表 操作系统 服务器 应用服务器