致力于技术进步

专注于编程艺术

博客园 首页 新随笔 联系 订阅 管理

多系统权限设计

1.      多系统基于角色的权限设计

这种方案是最常见也是比较简单的方案,不过通常有这种设计已经够了,这种方案对于每一个操作不做控制,只是在程序中根据角色对是否具有操作的权限进行控制;这里我们就不做详述.此处采用角色关联模块的方式。


2.       多系统基于操作的权限设计

这种模式下每一个操作都在数据库中有记录,用户是否拥有该操作的权限也在数据库中有记录,结构如下:


但是如果直接使用上面的设计,会导致数据库中的_SysUserFuncOperate这张表数据量非常大,所以我们需要进一步设计提高效率,请看方案3

 

3.       多系统基于角色和操作的权限设计

如上图所示,我们通过采用角色分配操作的方式,这样子就可以减少操作权限表(_SysRoleFuncOperate 中的记录,并且使设计更灵活一点。

但是这种方案在用户需求的考验之下也可能显得不够灵活够用,例如当用户要求临时给某位普通员工某操作权限时,我们就需要新增加一种新的用户角色,但是这种用户角色是不必要的,因为它只是一种临时的角色,如果添加一种角色还需要在收回此普通员工权限时删除此角色,我们需要设计一种更合适的结构来满足用户对权限设置的要求。

 

4.       2,3组合的权限设计,其结构如下:


我们可以看到在上图中添加了_SysUserFunc_SysUserFuncOperate表,使用此表来添加特殊用户的权限。这样在应用程序中我们就需要通过_SysUserFuncOperate_SysRoleFuncOperate两张表中的记录判断权限。

当然,有可能用户还会给出这样的需求:对于某一种Operate所操作的对象某一些记录会有权限,而对于其他的记录没有权限,比如说一个内容管理系统,对于某一些频道某个用户有修改的权限,而对于另外一些频道没有修改的权限,这时候我们需要设计更复杂的权限机制,对于此种情况,此处不作讨论,将会在以后把这种情况分为业务权限一块分析处理。

 补充:

对于上面介绍,有一些基础数据未列出,下图显示全部表的关系。其中有_SysFuncOperate,_System,_SysFunctions.

_SysFuncOperate:模块操作权限表,记录此模块所有的操作权限。

_Systems:全部系统

_SysFunctions:全部系统模块

备注:由于_SysFunctions加入的CultureInfo,多语言版本显示问题,所以在图上不能直接标示_SysUserFunc_SysFunctions_SysRoleFunc_SysFunctions的关系。其原本SysID,FuncID_SysUserFunc_SysRoleFunc外键。

 

 

 

 

 

 以前看过一篇文章,说一个软件的组成部分:50%的业务,50%的软件(包括50%的数据库设计和50%程序设计),实际上程序设计只占了25%,不知道大家是否认同这样的观点。

简单介绍一下数据库,表结构及字段说明如下,由于本人志向于设计开发大系统数据库,所以表会尽量满足简多易于理解。

如果三五个表就能解决系统菜单,权限问题,我想,像移动139提供一些个人菜单定制功能的话那系统性能不知道会怎么样。

 

数据库名:RoleSystem

表名:_Roles(角色表,存储各个子系统角色)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

记录编号

2

SysID

varchar

20

 

 

系统编号

3

RoleID

varchar

20

 

 

角色编号

4

RoleName

nvarchar

50

 

 

 

角色名称

5

Note

nvarchar

50

 

 

 

 

6

Pause

bit

1

 

 

((0))

停用

表名:_OperateList(操作列表,存储系统中存在的操作)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

OperateID

varchar

20

 

 

操作编号

3

OperateName

nvarchar

50

 

 

 

操作名称

4

Note

nvarchar

50

 

 

 

 

表名:_SysFuncOperate(系统模块操作,存储系统中每个模块具体的操作)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

SysID

varchar

20

 

 

系统编号

3

FuncID

varchar

20

 

 

模块编号

4

OperateID

varchar

20

 

 

操作编号

5

OperateText

nvarchar

50

 

 

 

 

6

Note

nvarchar

50

 

 

 

 

表名:_SysFunctions(系统模块,存储各个子系统的模块信息)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

CultureInfo

varchar

10

 

('en-us')

语言

3

SysID

varchar

20

 

 

系统编号

4

FuncID

varchar

20

 

 

模块编号

5

ParentID

varchar

20

 

 

 

上级编号

6

FuncName

nvarchar

30

 

 

 

模块名称

7

URL

nvarchar

100

 

 

 

模块地址

8

Target

nvarchar

10

 

 

 

 

9

Icon

nvarchar

20

 

 

 

 

10

Path

nvarchar

200

 

 

 

路径

11

IsEnd

bit

1

 

 

 

叶结点

表名:_SysRoleFunc(系统角色模块,存储各个子系统各个角色允许访问的模块信息)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

SysID

varchar

20

 

 

系统编号

3

RoleID

varchar

20

 

 

角色编号

4

FuncID

varchar

20

 

 

模块编号

表名:_SysRoleFuncOperate(系统角色模块操作,存储系统角色所拥有模块所具体的操作)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

SysID

varchar

20

 

 

系统编号

3

RoleID

varchar

20

 

 

角色编号

4

FuncID

varchar

20

 

 

模块编号

5

OperateID

varchar

20

 

 

操作编号

6

Note

nvarchar

50

 

 

 

 

表名:_SysUserFunc(系统用户模块,存储系统用户所具有的模块)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

UserID

varchar

20

 

 

用户编号

3

SysID

varchar

20

 

 

系统编号

4

FuncID

varchar

20

 

 

模块编号

表名:_SysUserFuncOperate(系统用户模块操作,存储用户所具有模块的操作)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

SysID

varchar

20

 

 

系统编号

3

UserID

varchar

20

 

 

用户编号

4

FuncID

varchar

20

 

 

模块编号

5

OperateID

varchar

20

 

 

操作编号

6

Note

nvarchar

50

 

 

 

 

表名:_Users(用户表)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

UserID

varchar

20

 

 

用户编号

3

UserName

nvarchar

50

 

 

 

用户名

4

Password

varchar

32

 

 

 

密码

5

DivID

varchar

20

 

 

 

部门编号

6

EmpID

varchar

20

 

 

 

员工编号

7

IsTopSuper

bit

1

 

 

((0))

 

8

IsDivSuper

bit

1

 

 

((0))

 

9

Pause

bit

1

 

 

((0))

 

10

LoginDT

datetime

8

 

 

 

 

11

CreateDT

datetime

8

 

 

 

 

12

CreateBy

nvarchar

20

 

 

 

 

表名:_Systems(系统表,存储软件的全部子系统)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

SysID

varchar

20

 

 

系统编号

3

SysName

nvarchar

50

 

 

 

系统名称

4

Note

nvarchar

200

 

 

 

 

5

Pause

bit

1

 

 

 

 

表名:_UsersRoles(用户角色,存储用户所具有的角色)

 

序号

列名

数据类型

长度

标识

主键

允许空

默认值

说明

1

RecID

int

4

 

 

 

2

UserID

varchar

20

 

 

用户编号

3

SysID

varchar

20

 

 

系统编号

4

RoleID

varchar

20

 

 

角色编号

5

WithGrant

bit

1

 

 

((0))

二级授权

6

Pause

bit

1

 

 

 

 

 

 

posted on 2011-07-27 14:24  stephen·周  阅读(575)  评论(0)    收藏  举报