您的位置:首页 > 其它

用户、角色、权限管理-设计方案之权限检测

2010-08-03 16:00 393 查看
在管理软件系统设计中,用户、角色、权限管理是不可缺少的三部分,三者具有如下关系:

User : Role = 1 : n

Role : Permission = 1 : n

如将权限控制到具体的功能模块,又有如下关系:

Role : Module : Permission = 1 : 1 : n

UserRole的设计很直观,就是1:n的关系表,User、Role均为主键。下面具体谈谈RolePermission的关系设计。

RolePermission完全可以采用和UserRole同样的设计,但要求Role、Module、Permission三个主键,此时处理 Role : Module : Permission的 1 : 1 : n 关系,显得有些费劲。针对于所有的功能模块
,Permission 均可划分为以下几种:

1. 列表/查看

2. 新增

2. 修改

4. 删除

我们可以将“Role : Module : Permission = 1 : 1 : n
” 中的“n”想办法变成“1”。设各权限值分别如下(2倍等比递增的关系):

1. 列表/查看 = 2

2. 新增 = 4

2. 修改 = 8

4. 删除 = 16

此时的“Role : Module : Permission”中的Permission
等于上述四种操作权限中所拥有的权限值之和
,比如:若某个(Role + Module)拥有查看、新增、修改、删除的权限,则其Permission=2+4+8+16=30。

下面进行权限检测
,判断“(Role + Module)”所对应的Permission是否包含上述四种操作权限中的每一个。解决问题关键:使用“&”运算符
。比如:

判断Permission是否包含“查看”的权限值,就用 if((Permission & 2) == 2)

判断Permission是否包含“新增”的权限值,就用 if((Permission & 4) == 4)

判断Permission是否包含“修改”的权限值,就用 if((Permission & 8) == 8)

判断Permission是否包含“删除”的权限值,就用 if((Permission & 16) == 16)

原理(转化为二进制,进行“与”运算):

30 & 2 = 00011110
& 00000010 = 00000010

30 & 4 = 00011110
& 00000100 = 00000100

30 & 8 = 00011110
& 00001000 = 00001000

30 & 16 = 00011110
& 00010000 = 00010000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: