通用权限架构设计

 

权限架构设计

一、设计说明

由于现在系统的设计具有很多不可知的因素,可能存在未来的扩展,故此,在设计本权限架构时,尽可能的顾及到了未来的系统扩充和可操作性、可维护性。把此权限架构作为一个独立的模块进行开发,方便未来的其他系统应用。

 

设计说明:

本架构采用树型权限模型处理,所有节点,都可以作为权限的实体存在。

如:

         |--权限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、   权限校验模块。

权限的校验可以直接根据模块IDTab_Purview中的ID)检索Tab_RoleUserPurview表,检索Purview[]的数据,如果存在行,说明该用户存在此模块的操作权限,否则说明该用户没有此模块的权限。

5、   扩展办法。

A、   用户登陆。

用户登陆时,直接读Tab_UserTable的数据,传入用户ID和加密后的密码进行比对检索。

B、   其他

6、   其他

四、界面设计

1、 权限维护。

见控件:UC_PurviewManagerUC_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    --权限,这里记录一个文本类型(有、无)
);

posted on 2008-11-12 17:03  sdav  阅读(1678)  评论(3编辑  收藏  举报

导航