管理软件系统设计中用户、角色、权限管理是不可缺少的三部分

管理软件系统设计中用户、角色、权限管理是不可缺少的三部分

在管理软件系统设计中,用户、角色、权限管理是不可缺少的三部分,三者具有如下关系:

User : Role = 1 : n

Role : Permission = 1 : n

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

Role: Module : Permission = 1 :1 : n

UserRole的设计很直观,就是1:n的关系表权限管理设计角色3D素材,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

文章来源:https://blog.csdn.net/sws8327/article/details/2933720