高级权限管理系统的设计---- 基于角色+模块的权限控制管理实现

 

          在任何系统中,权限设计是最基础的东西,一个好的权限系统,可以为开发人员提高开发进度;而且,又可以为用户提供完美的可扩展权限管理,而非简单的权限定制。

本文实现功能:实现基于角色+模块+权限粒度的权限管理

相关概念:

(1)角色:是一类功能的集合,比如新闻编辑这个角色,他可能有起草新闻、编辑新闻等功能集合,而责任编辑他可能就有更多的权限,比如除了新闻编辑的功能,还有审核新闻、删除新闻等粒度级别操作;这个可以理解为程序设计中的组.

(2)权限粒度:它是最小的单位,比如起草新闻、编辑新闻、审核新闻、删除新闻等

(3)用户:就是一个系统的最终使用用户(包括管理人员和被管理人员)

(4)资源:管理的对象

下面模拟对一个信息系统的控制数据:

(图一. 权限示意图)

 

用户信息表:

 

UserID

 

UserName

 

U1

 

张三

 

U2

 

李四

角色表:

 

RoleID

 

RoleName

 

R1

 

新闻编辑

 

R2

 

责任编辑

角色用户表:

 

RoleID

 

UserID

 

R1

 

U1

 

R2

 

U2

权限粒度表:

 

PrivilegeID

 

ResourceType

 

PrivilegeTitle

 

P1

 

NTA

 

起草新闻:分类A

 

P2

 

NTA

 

编辑新闻:分类A

 

P3

 

NTA

 

审核新闻:分类A

 

P4

 

NTA

 

删除新闻:分类A

 

P1

 

NTB

 

起草新闻:分类B

 

P2

 

NTB

 

编辑新闻:分类B

 

P3

 

NTB

 

审核新闻:分类B

 

P4

 

NTB

 

删除新闻:分类B

注意:这个表里面添加有资源(模块)信息

角色权限表:

 

RoleID

 

PrivilegeID

 

R1

 

P1

 

R1

 

P2

 

R2

 

P1

 

R2

 

P2

 

R2

 

P3

 

R2

 

P4

判断一个用户具有某个模块权限实现:

#获取权限(Privileges)的语句:

 

Select PrivilegeID  + `,` + ResourceType From 角色权限表 Where RoleID In (Select RoleID From 用户角色表 Where UserID='U1')

#权限的判断

Privileges.Contain('F1,NTA');

在新添加一个分类的时候,同时也在权限表中增加相应的记录(当然不是在数据库里面直接添加,由和权限相关的函数来添加)。

使用这种解决方案可以简单地对有分类的应用(比如论坛系统)的每个分类实行不同的控制(比如VIP板块,就只能拥有VIP角色的用户才能浏览、发表等,而其他板块只要是注册用户就可以使用了)。

在实际应用中PrivilegeID并不是随便的一个字符串,而是进行了编码,其编码中包含了模块ID以及能够体现出父子关系,举个例子来说:对于论坛系统,我们给它一个模块ID为”30”,论坛的权限我们先分成2类,一类是管理类(比如删除帖子),一类是使用类(比如发帖、回帖、浏览帖子等),给管理类一个编码:01,使用类一个编码:02,我们就对PrivilegeID进行如下的编码:

300101:删除帖子

300201:发帖

300202:回帖

300203:浏览帖子

对于资源(比如某个板块1,板块的ID为:01),我们可以组合出如下的Privileges(当然这个组合你也可以不用逗号分隔,用其他的组合方式也可以,不过不要产生歧义):

300101,01:板块1删除帖子的功能

300201,01:板块1发帖的功能

……

    对于RoleID也是采用的编码方式,也能体现角色的父子关系,也可以实现角色功能的继承等(当然获取角色功能列表的SQL语句就不是现在这么简单了)。在我现在的应用里面没有实现角色的继承(虽然角色的编码体现出了角色的父子关系)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值