当前位置:文档之家› 权限管理系统方案

权限管理系统方案

权限管理系统一、系统功能分析1. 系统的功能模块系统主要完成权限授予及权限验证的功能,权限授予实现某个用户对模块的某个功能的操作许可,组成权限数据库。

为用户分配角色来实现授权。

权限验证实现通过实现定义好的权限数据库,判断该用户是否对某个模块的某个功能具有操作权限,权限验证采用过滤器来设计,用户在应用系统中进行所有操作都需要经过这一层过滤器。

系统设计包括以下5个模块:➢人员管理:创建、更新、删除、查询人员信息、人员角色维护。

➢功能管理:创建、更新、删除、查询功能信息。

➢模块管理:创建、更新、删除、查询模块信息、模块功能维护。

➢角色管理:创建、更新、删除、查询角色信息、角色权限维护。

➢验证权限:判断用户对某一个模块的操作是否合法。

图 1系统功能结构图2. 技术选型系统采用业界常用的J2EE框架进行组合。

要求成熟稳定的系统框架以满足系统的松耦合性、扩性和可维护性。

权限管理系统采用Struts+Hibernate+Spring 三种框架组合开发。

表示层和控制层框架:选择业界广泛使用而且成熟稳定的Struts。

业务逻辑层框架:选择轻量级Spring Framework。

持久层框架:选择Hibernate。

3. 系统逻辑结构分析系统采用Struts+Hibernate+Spring架构进行开发。

在体系结构上将系统划分为四个层次:表示层、控制层、业务层、持久层。

表示层和控制层融合紧密,采用struts框架;持久层采用Hibernate框架;业务层和持久层统一使用spring 框架支撑。

Struts框架接收来自表示层请求“xxxAction.do”,请求参数封装在“xxxForm”中,struts依据配置信息调用控制层实例“xxxAction”的相关方法,该方法从“xxxForm”中取回请求参数,并从Spring Bean容器中获取业务层接口“xxxManager”的一个实例“xxxManagerImpl”。

在Spring Bean容器初始化“xxxManagerImpl”实例时,会根据beanid=“xxxDAO”获取对应的“xxxDAO”的一个实例,并赋值给“xxxManagerImpl”的“xxxDAO”接口。

xxxManagerImpl实例会调用持久层接口“xxxDAO”实例的方法完成具体的操作,并返回操作结果。

图 2权限管理模型结构图➢表示层(view):表示层主要负责在前台JSP页面上展示控制层提供的数据,提供操作界面,将用户的操作请求提交给控制层。

➢控制层(Controller):控制具体的业务流程。

接受来自表示层的用户操作请求,调用业务层的接口完成用户请求的处理,并将处理结果和数据保存到request对象中,控制流程转向表示层输出处理结果和数据。

表示层和控制层结合起来开发,采用struts框架,控制层的配置是在struts-config.xml配置文件中定义的,控制层和表示层之间的接口也需要在该文件中定义。

➢业务层(Manager) :业务层主要负责业务模块的逻辑应用设计,采用Spring框架。

首先需要规划业务层向控制层提供的接口,然后设计器接口的实现类,业务层接口的具体实现需要调用到已定义的DAO层的接口。

接着在Spring的配置文件中配置接口与实现的关联,以及设置相关的DAO接口。

在控制层中只需要调用业务层接口就可以很方便的进行业务处理。

封装业务层的业务逻辑有利于业务逻辑的独立性和可重用性。

➢持久层(DAO) :接受业务层的调用,完成数据的持久化工作。

采用Hibernate技术实现,业务层和持久层都采用Spring框架,首先需要定义业务层与持久层之间的接口,然后在设计接口的实现,最后在Spring的配置文件中定义此接口关联的实现类。

在业务层中调用此接口来进行数据业务的处理,而不关心此接口的具体实现类是哪个类,所有接口实现调用的部细节全部封装在Spring框架中。

DAO层的数据源,以及有关数据库连接的参数都需要在Spring的配置文件中配置。

二、数据库表结构设计1. 系统数据模型权限管理系统的实体有人员、角色、模块、功能,这四个实体之间的关系是:一个人员可以具有多个角色,多个人员也可以属于同一个角色;一个模块可以有多个功能,一个功能也可以属于多个模块;一个角色对多个模块的多个功能也可以有多个权限,多个角色也可以拥有同一个权限。

这四个实体之间关系如下:图 3权限管理系统数据模型图2. 系统表设计人员信息表 staff序号字段描述类型长度主键可空1 StaffID 编号Int 是否2 StaffName 名称Varchar(50) 否否3 StaffPwd 密码Varchar(50) 否否角色表 role序号字段描述类型长度主键可空1 RoleID 角色ID Int 是否2 RoleName 角色名称Varchar(50) 否否3 Description 描述Varchar(200) 否否人员角色关系表StaffRole序号字段描述类型长度主键可空1 ID 唯一标识Int 是否2 RoleID 角色ID Int否否3 StaffID 人员ID Int否否模块表 Module功能项表Function权限表 Auth(模块功能表)角色权限表RoleAuth3. 创建popedom(权限系统)数据库脚本create table staff(StaffID int auto_increment primary key, StaffName varchar(50) unique,StaffPwd varchar(50) not null)ENGINE=InnoDB DEFAULT CHARSET=gbk;create table role(RoleID int auto_increment primary key, RoleName varchar(50) unique,Description varchar(200) not null)ENGINE=InnoDB DEFAULT CHARSET=gbk;create table staffrole(ID int auto_increment primary key,RoleID int not null,StaffID int not null,CONSTRAINT staffrole_role_fk FOREIGN KEY (RoleID) REFERENCES role (RoleID),CONSTRAINT staffrole_staff_fk FOREIGN KEY (StaffID) REFERENCES staff (StaffID))ENGINE=InnoDB DEFAULT CHARSET=gbk;create table module(ModuleID int auto_increment primary key,ModuleName varchar(50) unique,ModlueURL varchar(200) not null)ENGINE=InnoDB DEFAULT CHARSET=gbk;create table function(FunctionID int auto_increment primary key,FunctionName varchar(50) unique,Description varchar(200) not null)ENGINE=InnoDB DEFAULT CHARSET=gbk;create table auth(AuthID int auto_increment primary key,ModuleID int not null,FunctionID int not null,CONSTRAINT auth_module_fk FOREIGN KEY (ModuleID) REFERENCES module (ModuleID),CONSTRAINT auth_function_fk FOREIGN KEY (FunctionID) REFERENCES function (FunctionID))ENGINE=InnoDB DEFAULT CHARSET=gbk;create table roleauth(ID int auto_increment primary key,AuthID int not null,RoleID int not null,CONSTRAINT roleauth_auth_fk FOREIGN KEY (AuthID) REFERENCES auth (AuthID), CONSTRAINT roleauth_role_fk FOREIGN KEY (RoleID) REFERENCES role (RoleID) )ENGINE=InnoDB DEFAULT CHARSET=gbk;4. 初始化数据insert into role values(1,'系统管理员','管理系统全部资源');insert into staff values(1,'admin','21232F297A57A5A743894A0E4A801FC3'); -- admin:admininsert into module values(1,'用户管理','staffAction.do'),(2,'角色管理','roleAction.do'),(3,'模块管理','moduleAction.do'),(4,'功能管理','functionAction.do'),(5,'用户角色管理','staffRoleAction.do'),(6,'模块功能管理','authAction.do'),(7,'角色权限管理','roleAuthAction.do');insert into function values(1,'save','保存'),(2,'create','创建'),(3,'list','列表'),(4,'delete','删除'),(5,'update','更新'),(6,'search','搜索'),(7,'staffrole','用户角色列表'),(8,'createstaffrole','创建用户角色'),(9,'removestaffrole','删除用户角色'),(10,'rolestaff','角色用户列表'),(11,'roleauth','角色权限列表'),(12,'createroleauth','创建角色权限'),(13,'removeroleauth','删除角色权限'),(14,'createauth','创建模块功能权限'),(15,'removeauth','删除模块功能权限'),(16,'createrolestaff','创建角色用户'),(17,'removerolestaff','删除角色用户');insert into auth values(1,1,1),(2,1,3),(3,1,4),(4,1,5),(5,1,6),(6,2,1),(7,2,3),(8,2,4),(9,2,5),(10,2,6),(11,3,1),(12,3,3),(13,3,4),(14,3,5),(15,3,6),(16,4,1),(17,4,3),(18,4,4),(19,4,5),(20,4,6),(21,5,6),(22,5,7),(23,5,8),(24,5,9),(25,5,10),(26,5,16),(27,5,17), (28,6,3),(29,6,14),(30,6,15),(31,7,11),(32,7,12),(33,7,13);insert into roleauth values(1,1,1),(2,2,1),(3,3,1),(4,4,1),(5,5,1),(6,6,1),(7,7,1),(8,8,1),(9,9,1),(10,10,1),(11,11,1),(12,12,1),(13,13,1),(14,14,1),(15,15,1),(16,16,1),(17,17,1),(18,18,1),(19,19,1),(20,20,1),(21,21,1),(22,22,1),(23,23,1),(24,24,1),(25,25,1),(26,26,1),(27,27,1),(28,28,1),(29,29,1),(30,30,1),(31,31,1),(32,32,1),(33,33,1);insert into staffrole values(1,1,1);。

相关主题