三种权限设计方案的归纳和比较

权限设计是很多系统中的子部分,主要在功能和流程上起控制作用,本文列举了几种常见的权限设计方案,写出来和大家讨论一下。其中权限系统的名都是自己起的,不恰当处还请大家提出.

1.等级权限系统
这种权限系统在论坛中很常见,在这种系统中,权限如同官阶从低到高排列,每个用户对应一个权限,在权限中设定了这个用户的权限等级,在用户需要执行操作前先查看其权限等级是否大于执行操作所需要的权限等级,是则进行操作。

在等级权限系统中领域对象用户类User的基本属性如下:
id // 用户ID
name // 用户名

领域对象权限类Priviledge的基本属性如下:
id // 权限ID
userid // 持有此权限的用户id
level // 用户的权限等级

level的设置示例
level 对应可执行的功能
0 访问
1 可跟帖
2 可创建主贴
3 可删除主贴
4 可创建频道
5 可删除频道
6 可查看用户
7 可分配用户权限
8 可修改用户密码
9 可删除用户
...

使用中,执行一个操作比如创建主贴时,先从Session中取出用户,然后按其id查出其对应的权限等级,拿它和执行创建主贴所需要的等级(3)进行比较,高于则可进行创建主贴操作,否则报告权限不够.

等级权限系统简单易用,在如论坛等刚性控制系统中使用很好,但不适用于需要有范围权限控制的场合,这时我们需要范围限制权限系统.

2.范围限制权限系统
等级权限系统系统的缺点是控制范围过广,比如一个论坛中有很多子论坛,一个子论坛的分版主同时也能对另一个同等级分论坛的帖子进行控制,这明显是不合理的,对此我们需要将版主权限控制在一版之内,这时我们需要范围限制权限系统.这种权限系统在项目管理系统中很常见.

在等级权限系统中领域对象用户类User的基本属性如下:
id // 用户ID
name // 用户名

领域对象项目类Project的基本属性如下:
id // 项目ID
name // 项目名

领域对象权限类Priviledge的基本属性如下:
id  // 权限ID
userid  // 持有此权限的用户id
projectid // 此权限对应的项目
level  // 用户的权限等级

其中,通过引入了新属性projectid,我们对权限的范围进行了有效限制,项目不同则权限等级再高也是无效,这样就起到了权限范围限制的作用.

3.范围限制单项权限系统
在上面两个权限系统中,权限高的自然能执行权限要求低的操作,这样做权力没有细分,在有些场合并不合理,比如即使是董事长不可直接操作人事部的招聘任务,他只对雇员去留有建议权.对于这样的场合我们需要使用范围限制单项权限系统.它的典型应用如工作流和OA系统。

在范围限制单项权限系统中领域对象用户类User的基本属性如下:
id // 用户ID
name // 用户名

领域对象项目类Project的基本属性如下:
id // 项目ID
name // 项目名

领域对象权限类Priviledge的基本属性如下:
id  // 权限ID
userid  // 持有此权限的用户id
projectid // 此权限对应的项目
abilityid // 权限控制能力id

领域对象权限控制能力类ability的基本属性如下:
id // 控制能力ID
item // 控制能力子项

item的设置示例
item 对应可执行的功能
0 读
1 写
2 查
3 删
...

通过对权限能力的细分,用户权限的控制精度更细了,对功能和流程就能有更精确的把握,更符合复杂的场合.

以上三种权限系统没有优劣之分只有适用场合的区别,前面的粗略但易于操作,后面的精确但失之烦琐,在现实使用中我们应该根据场合选择合适的权限系统.

posted @ 2011-01-31 14:23  与时俱进  阅读(555)  评论(0编辑  收藏  举报
友情链接:同里老宅院民居客栈