权限管理系统.docx
《权限管理系统.docx》由会员分享,可在线阅读,更多相关《权限管理系统.docx(9页珍藏版)》请在冰豆网上搜索。
权限管理系统
权限管理系统
权限管理系统
一、系统功能分析
1.系统的功能模块
系统主要完成权限授予及权限验证的功能,权限授予实现某个用户对模块的某个功能的操作许可,组成权限数据库。
为用户分配角色来实现授权。
权限验证实现通过实现定义好的权限数据库,判断该用户是否对某个模块的某个功能具有操作权限,权限验证采用过滤器来设计,用户在应用系统中进行所有操作都需要经过这一层过滤器。
系统设计包括以下5个模块:
Ø人员管理:
创建、更新、删除、查询人员信息、人员角色维护。
Ø功能管理:
创建、更新、删除、查询功能信息。
Ø模块管理:
创建、更新、删除、查询模块信息、模块功能维护。
Ø角色管理:
创建、更新、删除、查询角色信息、角色权限维护。
Ø验证权限:
判断用户对某一个模块的操作是否合法。
图1系统功能结构图
2.技术选型
系统采用业界常用的J2EE框架进行组合。
要求成熟稳定的系统框架以满足系统的松耦合性、扩张性和可维护性。
权限管理系统采用Struts+Hibernate+Spring三种框架组合开发。
表示层和控制层框架:
选择业界广泛使用而且成熟稳定的Struts。
业务逻辑层框架:
选择轻量级SpringFramework。
持久层框架:
选择Hibernate。
3.系统逻辑结构分析
系统采用Struts+Hibernate+Spring架构进行开发。
在体系结构上将系统划分为四个层次:
表示层、控制层、业务层、持久层。
表示层和控制层融合紧密,采用struts框架;持久层采用Hibernate框架;业务层和持久层统一使用spring框架支撑。
Struts框架接收来自表示层请求“xxxAction.do”,请求参数封装在“xxxForm”中,struts依据配置信息调用控制层实例“xxxAction”的相关方法,该方法从“xxxForm”中取回请求参数,并从SpringBean容器中获取业务层接口“xxxManager”的一个实例“xxxManagerImpl”。
在SpringBean容器初始化“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
序号
字段
描述
类型长度
主键
可空
1
ModuleID
模块ID
Int
是
否
2
ModuleName
模块名称
Varchar(50)
否
否
3
ModuleURL
模块路径
Varchar(200)
否
否
功能项表Function
序号
字段
描述
类型长度
主键
可空
1
FunctionID
功能ID
Int
是
否
2
FunctionName
功能名称
Varchar(50)
否
否
3
Description
描述
Varchar(200)
否
否
权限表Auth(模块功能表)
序号
字段
描述
类型长度
主键
可空
1
AuthID
权限ID
Int
是
否
2
ModuleID
模块ID
Int
否
否
3
FunctionID
功能ID
Int
否
否
角色权限表RoleAuth
序号
字段
描述
类型长度
主键
可空
1
ID
唯一标识
Int
是
否
2
AuthID
权限ID
Int
否
否
3
RoleID
角色ID
Int
否
否
3.创建popedom(权限系统)数据库脚本
createtablestaff(
StaffIDintauto_incrementprimarykey,
StaffNamevarchar(50)unique,
StaffPwdvarchar(50)notnull
)ENGINE=InnoDBDEFAULTCHARSET=gbk;
createtablerole(
RoleIDintauto_incrementprimarykey,
RoleNamevarchar(50)unique,
Descriptionvarchar(200)notnull
)ENGINE=InnoDBDEFAULTCHARSET=gbk;
createtablestaffrole(
IDintauto_incrementprimarykey,
RoleIDintnotnull,
StaffIDintnotnull,
CONSTRAINTstaffrole_role_fkFOREIGNKEY(RoleID)REFERENCESrole(RoleID),
CONSTRAINTstaffrole_staff_fkFOREIGNKEY(StaffID)REFERENCESstaff(StaffID)
)ENGINE=InnoDBDEFAULTCHARSET=gbk;
createtablemodule(
ModuleIDintauto_incrementprimarykey,
ModuleNamevarchar(50)unique,
ModlueURLvarchar(200)notnull
)ENGINE=InnoDBDEFAULTCHARSET=gbk;
createtablefunction(
FunctionIDintauto_incrementprimarykey,
FunctionNamevarchar(50)unique,
Descriptionvarchar(200)notnull
)ENGINE=InnoDBDEFAULTCHARSET=gbk;
createtableauth(
AuthIDintauto_incrementprimarykey,
ModuleIDintnotnull,
FunctionIDintnotnull,
CONSTRAINTauth_module_fkFOREIGNKEY(ModuleID)REFERENCESmodule(ModuleID),
CONSTRAINTauth_function_fkFOREIGNKEY(FunctionID)REFERENCESfunction(FunctionID)
)ENGINE=InnoDBDEFAULTCHARSET=gbk;
createtableroleauth(
IDintauto_incrementprimarykey,
AuthIDintnotnull,
RoleIDintnotnull,
CONSTRAINTroleauth_auth_fkFOREIGNKEY(AuthID)REFERENCESauth(AuthID),
CONSTRAINTroleauth_role_fkFOREIGNKEY(RoleID)REFERENCESrole(RoleID)
)ENGINE=InnoDBDEFAULTCHARSET=gbk;
4.初始化数据
insertintorolevalues
(1,'系统管理员','管理系统全部资源');
insertintostaffvalues
(1,'admin','21232F297A57A5A743894A0E4A801FC3');--admin:
admin
insertintomodulevalues
(1,'用户管理','staffAction.do'),
(2,'角色管理','roleAction.do'),
(3,'模块管理','moduleAction.do'),
(4,'功能管理','functionAction.do'),
(5,'用户角色管理','staffRoleAction.do'),
(6,'模块功能管理','authAction.do'),
(7,'角色权限管理','roleAuthAction.do');
insertintofunctionvalues
(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','删除角色用户');
insertintoauthvalues
(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);
insertintoroleauthvalues
(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);
insertintostaffrolevalues(1,1,1);