在
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