通用权限架构设计
权限架构设计
一、设计说明
由于现在系统的设计具有很多不可知的因素,可能存在未来的扩展,故此,在设计本权限架构时,尽可能的顾及到了未来的系统扩充和可操作性、可维护性。把此权限架构作为一个独立的模块进行开发,方便未来的其他系统应用。
设计说明:
本架构采用树型权限模型处理,所有节点,都可以作为权限的实体存在。
如:
|--权限A
|--------插入记录。
|--------修改记录。
|--------删除记录。
|--------查询权限。
|--权限B
|--------打印权限。
|--------浏览权限。
|--------管理权限。
|--------查询权限。
如上所示,在[权限A]这个模块下,存在了插入、修改、删除、查询四个权限(也可能是存在多个),那么我们为了扩展的方便,将所有的权限,都以此树的形式进行处理,针对某一个权限节点,进行判断,控制。当我们要控制某一个模块的权限时,我们可以针对其父节点进行控制,当我们需要控制到某一个末端的权限时,我们可以针对末端子节点进行控制。
每一个用户,都可以拥有多种角色,这样,我们可以方便处理交叉权限。
二、库表结构
见附件:PurviewTable.Sql
注:为方便移植,在程序编写过程中,应尽量避免使用存储过程,尽量使用标准SQL和数据集进行操作,数据集的使用,尽量使用非强命名的数据集,数据查询时,避免标明字段的查询,条件允许的情况下,尽量使用*号,方便扩展。
为了程序编写的方便,所有表,都没有使用关系,所以,在表的添加删除操作时,一定要到位,特别时删除时,关系子表的数据一定要同步删除。
三、程序设计
1、 权限维护模块。
本模块主要实现针对权限树(表Tab_Purview)的维护,实现以树的形式的维护管理。
实现要点:
A、 实现权限表以树形式的显示。
B、 实现权限表的不同节点的插入、修改、删除。
2、 用户维护模块。
本模块主要实现对用户的管理,针对用户表(Tab_UserTable)的操作。实现其添加、删除、修改等功能。用户密码字段(UserPass)应保存加密后的密码。
3、 角色维护模块
本模块主要实现针对角色的维护,其实就是表Tab_Role的插入修改删除。
A、 针对角色表Tab_Role的插入删除,对应的角色权限表Tab_RolePurview也要进行操作。
B、 每建立一个角色,将权限表Purview中的权限架构信息COPY一份到Tab_RolePurview表,并赋于其相应的权限。
C、 该角色所包含的用户的管理,针对该角色,添加、删除包含的用户。当添加一个用户时,就要向角色用户权限表Tab_RoleUserPurview插入数据,Copy角色用户表中Tab_RolePurview的数据到Tab_RoleUserPurview表。
D、 当删除一个用户时,应当连同Tab_RoleUserPurview中该用户的权限一同删除。
E、 当删除一个角色时,应当连同Tab_RoleUserPurview中该角色的权限一同删除。
4、 权限校验模块。
权限的校验可以直接根据模块ID(Tab_Purview中的ID)检索Tab_RoleUserPurview表,检索Purview为[有]的数据,如果存在行,说明该用户存在此模块的操作权限,否则说明该用户没有此模块的权限。
5、 扩展办法。
A、 用户登陆。
用户登陆时,直接读Tab_UserTable的数据,传入用户ID和加密后的密码进行比对检索。
B、 其他
6、 其他
四、界面设计
1、 权限维护。
见控件:UC_PurviewManager,UC_PurviewAdd,新增和修改可以使用同一界面。
2、 用户管理。
见控件:UC_UserManager,UC_UserAdd,新增和修改可以使用同一界面。
3、 角色管理。
见控件:UC_RoleManager
4、 系统登陆。
见控件:UC_Login
五、其他
A、 字典管理
字典的管理其实就是一个表(Tab_Dictionary)的读写操作。
界面见UC_DicManager。
左边为字典树,里面根据Tab_Dictionary中的唯一字典名列出,选择左边字典名时,右边GRID中列出该字典下的所有字段变量,选择一个字段变量,将字段变量的信息读入上面编辑框中,点保存保存到库。如果是新的字典,则直接插入到表,然后刷新左侧树信息。点删除时,删除GRID选择的数据。如果只有一条,提示不能删除。字典最少要保留一条数据。
六、时间要求:
SQL脚本
--权限树表,主要是保存一个权限架构的模型。
Create Table Tab_Purview
(
PurviewID Int Identity (1, 1) Not Null, --自增ID
ParentID Int Null, --父节点ID
OrderIndex Int Null, --排序ID,主要是方便以后的权限编辑
NodeName Varchar(50), --权限节点名称
Describes Varchar(200) --权限节点描述
);
--角色表,保存角色和角色的描述信息。
Create Table Tab_Role
(
RoleID Int Identity (1, 1) Not Null, --自增ID
RoleName Varchar(50) Not Null, --角色名称
Describes Varchar(200) --角色描述
);
--角色权限表,保存某一个角色的权限信息。
Create Table Tab_RolePurview
(
RoleID Int Not Null, --角色ID
PurviewID Int Not Null, --权限ID
PurviewName Varchar(50) Not Null,--权限名称,这里的权限名称其实是一个冗余字段,主要是方便显示,显示时不用再使用联合查询。
Describes Varchar(200), --权限节点描述
Purview Varchar(2) Not Null --权限,这里记录一个文本类型(有、无)
);
--用户表,保存用户信息。
Create Table Tab_UserTable
(
UserID Int Identity (1, 1) Not Null,--用户ID
UserName Varchar(50), --用户名称,这里的用户名称其实是一个冗余字段,主要是方便显示,显示时不用再使用联合查询。
UserPass Varchar(2000), --用户密码,保留2000的长度主要是针对密码的加密处理。
Describes Varchar(200) --用户描述
);
--角色用户表,保存某一个角色下的用户信息。
Create Table Tab_RoleUser
(
RoleID Int Not Null, --角色ID
UserID Int Not Null, --用户ID
UserName Varchar(50) --用户名称。
);
--角色用户权限表,保存某一个角色下的用户权限信息。
Create Table Tab_RoleUserPurview
(
RoleID Int Not Null, --角色ID
UserID Int Not Null, --用户ID
PurviewID Int Not Null, --权限ID
PurviewName Varchar(50), --权限名称,这里的权限名称其实是一个冗余字段,主要是方便显示,显示时不用再使用联合查询。
Purview Varchar(2) Not Null --权限,这里记录一个文本类型(有、无)
);