|
|
*注:关键词如:会计信息、VB、学生、酒店、审计、VF等。关键词2是为了更加准确的找到你要的(但建议不要填上关键词2,因为这样查找的范围就小了)。
|
|
|
|
论文题目:
|
PowerBuilder中多用户权限管理实现方案,毕业论文
|
|
|
PowerBuilder中多用户权限管理实现方案,毕业论文
|
|
|
摘 要:本文介绍了在PowerBuilder7.0中实现系统用户的权限管理的一种方便有效的方法。
关键词:PowerBuilder 多用户 权限
1 引言
在PB实现一般管理系统的时候,我们会遇到这样一种情况,作为一个系统,可以分为若干个子系统,有多个操作员对它进行操作,每个操作员对各个子系统的权限不同,甚至在同一子系统中,操作员对各个菜单项的操作权限也不一样,更细一点,不同的操作员对于同一窗口中某一按钮的操作权限也是不一样的,那么,怎样较好地实现对不同用户细化到某个按钮的权限控制呢?笔者在进行一个系统的开发过程当中,积累了一些心得,与大家探讨一下。
2 实现方案分析
首先,怎样使得一个操作员不能对他不具权限的菜单项或按钮进行操作呢,我们当然没有必要为不同的用户制作不同的菜单项或窗口(当然这也不失为一种方法),考虑到菜单项和按钮的Visible和Enabled属性,我们自然想到,设置这两个属性便可以完成上面的要求,比如m_1.m_2.Visible=False 或者 Cb_1.Enabled=False,菜单不可见了,操作员自然就不可操作了。 其次,对于一个多用户的系统,我们自然需要用一个表来存放基本的用户信息,其中要包括用户登录系统的用户名、密码,如果要进行权限的分级控制,还需要一些字段来存放有关权限的信息,有些成品系统中是这样做的,不过它们将每个需要进行控制的菜单项均用一个字段来表示,这样做不太好,万一设计一个权限控制比较细的系统时,这样做的可行性便不好。其实,对于某个菜单项或其他控件,进行权限控制时,状态只有两个:True 或 False,完全可以用一位二进制数0或1来表示。我们可以将一个子系统中所有需要进行权限控制的项组合成一个二进制串,每四个二进制数转化成一个字符(可以是"0","1","2"...."a","b","c","d","e","f"),再保存在表中,这样我们来算一下,如果一个子系统中有64个项需要进行权限控制,则只需要一个 64/4=16 位的字符类型的字段即可以表示,而不像过去那样需要64个字段来分别标记。
好了,第一步存放的问题解决了,那么怎样根据这样的一个标记权限的字符串来设置各个菜单项或其他控件的Visible 或Enabled属性呢?我注意到,PB中菜单项和其它控件都有一个tag属性,而这个属性我们一般不太会用到它,我们可以用tag属性来存放一个数字,这个数字标示了该控件在权限控制字段的那个二进制串中表示该控件的访问权限的0、1的位置。举个例子,有一个权限控制二进制串'01001111010....',菜单项"打开文件"的tag为7,则在该二进制串中第7位"1"便标记了当前用户对"打开文件"的控制权限为"1",当一个用户登录系统时,在通过了密码验证后,将他对该系统的权限控制字段的字符串读到一个全局变量中,将该字符串恢复为0、1串,对于每个需要进行权限控制的项,依次根据其tag记录的相应位置的0或1设置Visible或Enabled属性,便可以完成对权限的管理。
当然,要注意的是,有些控件的权限设置并不是在一进入系统后就进行的,而是推迟到该控件被调用时才进行。
3 实现方案实例
下面给出了一个例子,来说明上面的论述。
有以下3个菜单项和2个按钮需要控制3个菜单项名称分别为:
m_a.m_h1.m_m1 、m_a.m_h1.m_m2 和m_a.m_h1.m_m3,这3个菜单项的tag设置为 1、2、3。有2个按钮位于两个窗口中:cb_1 位于窗口w_1中,cb_2 位于窗口w_2中,这两个按钮的tag设置为4和5。
这样,需要用5位来表示它们的访问权限。
函数getbin用来进行从"0","1"...,"a"..."f"到四位二进制串的转换
getbin(string s_ch) returns string
string s_out,s_temp,temp
integer i_len,i
i_len=len(s_ch)
if i_len=0 or isnull(s_ch) then
s_out="0"
end if
temp=""
s_temp=""
for i=1 to i_len
temp=mid(s_ch,i,1)
choose case lower(temp)
case "a"
s_temp="1010"
case "b"
s_temp="1011"
case "c"
s_temp="1100"
case "d"
s_temp="1101"
case "e"
s_temp="1110"
case "f"
s_temp="1111"
case "0"
s_temp="0000"
case "1"
s_temp="0001"
case "2"
s_temp="0010"
case "3"
s_temp="0011"
case "4"
s_temp="0100"
case "5"
s_temp="0101"
case "6"
s_temp="0110"
case "7"
s_temp="0111"
case "8"
s_temp="1000"
case "9"
s_temp="1001"
case else
s_temp="0000"
end choose
s_out=s_out+s_temp
s_temp=""
next
return s_out
首先,定义一个全局变量s_admin用来存放该用户登录后的权限信息:
string s_temp
select rights into :s_temp where user=:username and password=:userpassword;
s_admin=getbin(s_temp) //s_admin存放的是已经转化好的权限信息。
还需要定义一个权限函数check来完成从 0、1 到true、false 的转换。
check(string menutag) returns boolean
string s_temp
s_temp=mid(s_admin,integer(menutag),1) //s_admin为全局变量
if isnull(s_temp) or s_temp="1" then
return true
else
return false
end if
假设w_main为登录后的主窗口,它的菜单为m_a,则在w_main的open事件中这样写:
m_a.m_h1.m_m1.enabled=check(m_a.m_h1.m_m1.tag)
m_a.m_h1.m_m2.enabled=check(m_a.m_h1.m_m2.tag)
m_a.m_h1.m_m3.enabled=check(m_a.m_h1.m_m3.tag)
在窗口w_1的open事件中写如下代码:
cb_1.Enabled=check(cb_1.tag)
同样,在窗口w_2的open事件中:
cb_2.Enabled=check(cb_2.tag)
这样就可以完成对上述5项的控制。当然,这种方法在需要控制的项很多时(达到几十项)的效果才比较明显。
四、结束语
以上论述了权限控制的实现,使用这种方法将会使得我们在编写软件系统时很方便的实现多用户的权限管理。当然,在多用户系统中,还需要有对用户权限的设置功能,这个和上面是一个相反的过程,相信读者在看完上面的内容之后一定会掌握权限设置的做法,这里就不再冗述了。
以上程序在PB7.0,Windows2000下运行通过。
参考文献
[ 1 ] 杜峰 陈海峰 . PowerBuilder 7 应用与开发. 机械工业出版社 1999
本站提供除计算机信息管理以外免费毕业论文。
|
|
如果是计算机课程、软件设计、信息管理毕业论文、计算机毕业设计、毕业论文,请查看购卖参考论文流程
请按标明的价格进行网上支付:
【声明】:为了使这个免费参考论文站能长期运行下去,请大家在需要本站信息管理、计算机毕业设计、毕业参考论文时,请支付一点网络维护费。只要您到款,我们就通过邮件发给您需要参考的论文。
我的手机与我的银行帐号联网的.你存款后我的手机在十分钟会有提示的.你存款好后,马上发email给我说明你要的论文及存款时间、金额. (一般都开着的:早上8:00--23:00) email:bestlw@163.com 或 bestlw@yahoo.com.cn
声明:
1、严惩其它站点复制本站论文内容!作为自己的商业使用! 2、为了防止盗制,我们做了一些处理,给大家带来不便之处,请谅解! 3、这里将建成全国最大的免费参考论文库,原大家多多投稿:bestlw@163.com。 4、部分内容如有遇上作者版权,请与我们联系我们及时以删除。 5、本站部分论文只提供参考,盗用发表者自负责任!
|
|
|