在PowerBuilder中实现菜单条级权限的设置
云南昆明 陈进
在一个网络应用程序中,对不同的使用人员授与不同的程序使用权是非常重要的。一般的应用程序都分:录入权,查询权,修改权,审核权等等,很多功能可细分到菜单条级,才能方便管理,不同的功能应用应该授与不同工作性质的人员,才能使一个公司或团体分工明确,责任清晰,实现规范化管理。
对系统管理人员来说灵活方便地设置不同人员的对程序的不同权限,并能够不以用户身份进入程序也能查看到用户所拥有的权限,这是后台管理程序最基本的要求。本人通过实践摸索在PB中实现了用户程序到菜单条级权限的设置和查看。此模块方便之处是管理员在设置用户权限时所见的菜单与用户所用的菜单一致,用户有哪些权限一目了然。
我们先来看PB与此相关的两个函数:Mid and Replace
1.函数Mid ( string, start {, length} )
取string字串中第start项后的length位字串。
例:Mid("ABCDEFG",3,2)
返回值:"DE"
2.函数Replace ( string1, start, n, string2 )
替换string1中第start 项后n位,用string2 串。
例:Replace ( "ABCDEFGH",3,2,"abc" )
返回值:"ABCabcFGH"
到此可能用过PB的朋友已能猜出这两个函数就是在PB中实现菜单条权限定义的基础。
我们先假设我们应用程序的菜单如下图:
M_1 M_2 M_3 ......
M1_1 M2_1 M3_1
M1_2 M2_2 M3_2
M1_3 M2_3 M3_3
M1_4 M2_4
M2_5
要求菜单条变量名的定义严格按照矩阵方式定义。然后复制一份与应用程序菜单一样的菜单模式,用于系统授权模块使用,包括菜单条变量名也一样,只不过菜单条下无调用程序代码,而是菜单状态设置函数。设三个字符串全局变量,用于表示菜单条的状态。我们约定"0"表示菜单条为不可选,"1"为可选。
string M1,M2,M3
M1="0000" file://对应M_1的四个子菜单条
M2="00000" file://对应M_2的五个子菜单条
M3="000" file://对应M_1的三个子菜单条
设初始值为菜单条皆不可选。
在M1_1菜单下clicked事件程序为:
IF m1_1.Checked = TRUE THEN
m1_1.UnCheck( )
M1 = Replace( M1, 1, 1, "0")
ELSE
m1_1.Check( )
M1 = Replace( M1, 1, 1, "1")
END IF
在M1_1菜单下clicked事件程序为:
IF m1_2.Checked = TRUE THEN
m1_2.UnCheck( )
M1 = Replace( M1, 2, 1, "0")
ELSE
m1_2.Check( )
M1 = Replace( M1, 2, 1, "1")
END IF
.....其它以此类推
函数说明:
file://m1_2.Check( )在所点选菜单条前加"V"(钩符号)
file://m1_2.UnCheck( ) 在所点选菜单条前去掉"V"(钩符号)
如果A用户可使用M1_1,M1_3; M2_2; M3_1。那通过你鼠标的点选,菜单状态变量的值应该为:
M1="1010"
M2="01000"
M3="100"
如果B用户可使用M1_1; M2_3,M2_4,M2_5; M3_1,M3_2,M3_3。那通过你鼠标的点选,菜单状态变量的值应该为:
M1="1000"
M2="00111"
M3="111"
把此值对应存入A、B用户的权限字段中,在A、B用户进入应用程序时取出,对应设置菜单条的可用与不可用,即实现了对用户使用菜单权限的定义。
本文地址:http://com.8s8s.com/it/it21545.htm