在Segment表中,有三个字段,segmentId、segmentName、segmentRight,
分别表示权限序号(从1开始),模块名,访问权值。其中segmentRight=2的segmentId-1次方,
即
segmentId=1,segmentRight=1 (对应二进制1)
segmentId=2,segmentRight=2(对应二进制10)
segmentId=3,segmentRight=4(对应二进制100)
segmentId=4,segmentRight=8
segmentId=5,segmentRight=16
......
相当于 segmentRight 的第0位代表segmentId=1的模块访问权限,
segmentRight 的第1位代表segmentId=2的模块访问权限,
segmentRight 的第2位代表segmentId=3的模块访问权限,
segmentRight 的第3位代表segmentId=4的模块访问权限,
......
而在部门表里的Segment=上面segmentRight之和,比如,Segment=7,其二进制为0111,
则表示该部门对segmentId是1,2,3的模块具有访问权。换句话说,测试部门表里的Segment
字段的各个二进制位,即可知该部门是否具有对某模块的访问权。
对Segment表进行单独管理,增、删、改操作。
对部门表的管理,增加权限的设置,即显示已有的可操作模块,操作者进行选择,然后
将选中的各模块的 segmentRight 值加起来,赋予部门表里的Segment字段。
访问模块的权限判断流程如下:
用户点击某模块-->从Segment表中通过segmentName(模块名)取出该模块的segmentRight值,
同时从部门表中取出该部门的segment值
-->将segment值和segmentRight值进行“位与”操作,即 segment & segmentRight,
-->如果“位与”的结果等于segmentRight,则该部门具有操作该模块的权限,
使用户进入该模块的操作。
-->如果“位与”的结果等于0,则拒绝该用户进入该模块的操作。
相关代码以及讨论者请按如下方式联系:
MSN:yun15291li@hotmail.com
Email:ygyunguang@yahoo.com.cn