分享
 
 
 

基于用户的安全策略在B/S中的实现(2)

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

2 菜单管理

菜单管理主要包括两部分的内容,菜单项的编辑维护与根据当前登陆用户的权限进行菜单的生成。

菜单的编辑维护就是指对菜单表的维护。因为比较简单,在此不做详细说明,只是要注意以下三个问题:

第一、菜单编号与权限位数的生成。因为菜单项是可以删除的,如果新增菜单项获取编号与权限位数时只是在最大的编号上增1的话,必须会导致编码资源的浪费,特别是权限位数,只有100位,如果由于跳号而导致了编码资源的浪费,必然导致新功能模块无编码资源可用。所以,在添加新菜单项是必须要解决跳号的问题。请看以下取编号与权限位数的语句:

select min(CDBH)+1 from CDB where CDBH+1 not in(select CDBH from CDB)

select min(QXWS)+1 from CDB where QXWS+1 not in(select QXWS from CDB)

我们只要保证对于菜单维护本身的这个功能模块给它分配菜单编号为1,权限位数为1的话,就能够保证在任何情况下新增菜单项时菜单编号与权限位数不会跳号,编码资源能够得到充分利用。因为菜单维护本身这个菜单项在通常情况下是不会被删除的。

第二、入口路径是指进入本功能模块的第一个页面的连接地址,请注意路径的相对性问题。

第三、相关文件是指完成本功能模块的页面组合。一般情况下,一个菜单项下连接一个功能模块,要完成该功能模块的功能可能需要若干个ASP页面。例如,菜单项1的入口路径是../menu1.asp,还要以下三个页面,menu11.asp, menu12.asp, menu13.asp,则相关文件的内容是指meunu1.asp, menu11.asp,menu12.asp,menu13.asp这个字符串序例。该项的主要作用是为了安全检查而设置的,也就是页面在系统中的注册过程。

根据当前登陆用户的权限进行菜单生成时有一个关键的会话变量:Session("YHQX"),该变量在后面将要进行描述的安全检查过程中生成,一直保存到用户退出系统或者会话超时失效时为止。里面的内容就是100位的当前登陆用户的权限字符串。根据该变量生成菜单的过程如下:

<% sql="select * from CDB where FCDBH=0 order by CDBH"

set Rs=Conn.execute(sql)

'取得菜单表中的所有有子菜单的父菜单

'遍历父菜单

do while not Rs.eof

SubMenuNum=0

sql="select QXWS from CDB where FCDBH="&Rs("CDBH")&" order by CDBH"

set Rs1=Conn.execute(sql)

'获取当前父菜单下的所有子菜单

'遍历当前父菜单下的子菜单

do while not Rs1.eof

if Mid(Session("YHQX"),Rs1("QXWS"),1)=1 then

SubMenuNum=SubMenuNum+1

'如果当前用户有当前子菜单的权限,则子菜单的个数加上1

end if

Rs1.movenext

loop

Rs1.close

set Rs1=nothing

if SubMenuNum>0 then

'如果当前用户的当前父菜单的下子菜单个数大于零则生成该父菜单

if Rs.bof then FirstMenu=Rs("CDBH") end if

MenuNum=Rs("CDBH")

ParentName=Rs("CDMC")

response.write "<!-- "&ParentName&"父菜单 -->"

%>

<menu class=parent name=<%=ParentName%> url=<%=Rs("RKLJ")%> target= mainFrame >

'菜单的形式与样式根据需要自己调整,这里采用泛指方式

<%

response.write "<!-- "&ParentName&"子菜单 -->"

sql="select * from CDB where FCDBH="&MenuNum&" order by CDBH"

set Rs1=Conn.execute(sql)

'查找该父菜单下的所有子菜单

do while not Rs1.eof

if Mid(Session("YHQX"),Rs1("YHQX"),1)=1 then

%>

<menu class=child name=<%=Rs("CDMC")%> url=<%=Rs("RKLJ")%> target= mainFrame ><br>

'菜单的形式与样式根据需要自己调整,这里采用泛指方式

<%

end if

Rs1.movenext

loop

Rs1.close

set Rs1=nothing

end if

Rs.movenext

loop

Rs.close

set Rs=nothing

%>

由于本系统只有两级菜单,所以没有牵涉到菜单递归调用生成的问题。如果要实现的话必须把菜单生成过程定义成函数形式,才能进行递归调用,在此不做详细讨论。

3 权限分配

权限的分配由用户组权限分配与用户的权限分配两部分组成。是将具体的菜单与用户组或者用户关联的过程。

首先看用户组的添加界面如下:

<form name="zjyhz" method="post" action="yhzbmb_zj.asp" onsubmit="return checkinput(this)"> <!-- 调用输入检验函数,并生成权限字符串--

[1] [2] [3] [4] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有