文档库 最新最全的文档下载
当前位置:文档库 › 权限设置

权限设置

在制作论坛程序时,除了前台对部分有特定权限的用户访问外,我们还要制作一套完善的后台管理系统,以便对论坛信息进行在线管理,这只允许高级用户,如管理员、分坛版主等才能登陆管理页,其它未授权的普通会员和游客不能访问。这里假设普通会员、版主、管理员等各自有一个“控制面板”页面,以便筛出自己相关的资料进行管理,各个级别的用户控制面板完全没有关联,即是说,除了URL地址外,各个页面间没有任何的超链接联系。如何根据用户权限登陆到不同的页面呢?如果你用DW MX的话,可能你会想到,三个页面、用三个表分别存放管理员、版主和普通会员的用户名和密码,然后用三个“登陆用户”服务器行为来验证用户身份并把他转到相应级别的页。这个方法可行,可是太麻烦了,还要三个表和三个服务器行为。而本文,介绍你用一个数据库表和一“个登陆用户”服务器行为并且修改相应代码就OK了!

【操作步骤】:

●1、用ACCESS创建一个数据库表,设计四个字段,对应项目以下:

ID 自动编号

uesr 用户名

pws 密码

ClassID 级别/权限

如下图:


其中,级别/权限用数字来表示,1为普通会员,2为版主,3为管理员。

●2、新建一个登陆页面,插入表单、两个文本域、一个按扭。文本域对应名称如下:

用户名:uesr

密 码:pws

●3、执行“服务器行为”——“用户身份验证”——“登陆用户”,如下图:


弹出“登陆用户”对话框,请把各项对应填好,如下图:


注意:“登陆用户”对话框下边的“基于以下项限制访问”选中“用户名和密码”。

打开数据库表,填入用户资料,如下图:

李飞 555 3(管理员)

陈根 666 2 (版主)

张三 777 1(普通会员)

各个字段依以上各项按顺序用户名、密码、级别填好。如下图:


按“F12”键预览,分别输入用户名和密码,是否能正常登陆到AA.asp页。

如果这一步你以已经成功了,请继续。

●4、制作三个页面,分别为普通会员、版主、管理员,对应文件名如下:

普通会员: aa.asp

版主 : bb.asp

管理员 : cc.asp

还有一个登陆失败页,文件名为:no.asp

●5、手工修改“登陆用户”服务器行代码

切换到“代码”视图,找到这段代码:


其中(选中部分)如,

MM_redirectLoginSuccess="AA.asp" 为登陆成功后转到页地址。


MM_redirectLoginFailed="NO.asp" 为登陆失败后转到页地址。

先把第一句代码删除掉。寻找以下代码段:

[page]

其中选中部分如:

MM_rsUser.Source = "SELECT uesr, pws" 为查询数

据库记录的语句,它只查询“uesr”和“pws”这两个字段,现在由于我们还要查询““classID”这个字段,以读取该字段的值,然后根据该字段的值判断用户究竟应该把他带到那个页。

把它改成:

MM_rsUser.Source = "SELECT uesr, pws,classID"

即添加字段“classID”一并查询。

继续查找以下代码段:


在(如图中选中部分):


Session("MM_UserAuthorization") = ""
End If

的下面手工添加以下语句:


if (MM_rsUser.Fields.Item("classID").Value)=1 then
MM_redirectLoginSuccess="aa.asp"
elseif (MM_rsUser.Fields.Item("classID").Value)=2 then
MM_redirectLoginSuccess="bb.asp"
elseif (MM_rsUser.Fields.Item("classID").Value)=3 then
MM_redirectLoginSuccess="cc.asp"
end if



如下图中的选中部分:


添加代码完成。试按F12键预浏,输入不同的用户名,是不是把你带到不同的页面去了?根据这个原理,你可以在:


if (MM_rsUser.Fields.Item("classID").Value)=1 then
MM_redirectLoginSuccess="aa.asp"
elseif (MM_rsUser.Fields.Item("classID").Value)=2 then
MM_redirectLoginSuccess="bb.asp"
elseif (MM_rsUser.Fields.Item("classID").Value)=3 then
MM_redirectLoginSuccess="cc.asp"

elseif (MM_rsUser.Fields.Item("classID").Value)=xxxx then

MM_redirectLoginSuccess="xxxx.asp"

.....
end if



添加多个用户级别,让他登陆到属于自己的小天地。

小窍门:

DW MX的服务器行为大量使用“转到页”,如登陆失败,转到某某页,文件太多对于站点文件管理不方便,我们把登陆失败的转到“NO.asp”页的代码改一改,让出错信息在本页就能显示,把那个NO.asp给删了,呵呵!

找到这段代码:


其中(选中部分),

Response.Redirect(MM_redirectLoginFailed)

改为:

Response.write("对不起!用户名或密码错误!")

如下图(选中部分):


再把:

MM_redirectLoginFailed="NO.asp"

这句代码删除。

OK!整个工程顺利完工!

按F12试试吧!

页面完整代码:


<%@LANGUAGE="VBSCRIPT"%>

<%
' *** Validate request to log in to this site.
MM_LoginAction = Request.ServerVariables("URL")
If Request.QueryString<>"" Then MM_LoginAction = MM_LoginAction + "?" + Request.QueryString
MM_valUsername=CStr(Request.Form("uesr"))
If MM_valUsername <> "" Then
MM_fldUserAuthorization=""
MM_flag="ADODB.Recordset"
set MM_rsUser = Server.CreateObject(MM_flag)
MM_rsUser.ActiveConnection = MM_new_STRING
MM_rsUser.Source = "SELECT uesr, pws,classID"
If MM_fldUserAuthorization <> "" Then MM_rsUser.Source = MM_rsUser.Source & "," & MM_fldUserAuthorization
MM_rsUser.Source = MM_rsUser.Source & " FROM use WHERE uesr='" & Replace(MM_valUsername,"'","''") &"' AND pws='" & Replace(Request.Form("pws"),"'","''") & "'"
MM_rsUser.CursorType = 0
MM_rsUser.CursorLocation = 2
MM_rsUser.

LockType = 3
MM_rsUser.Open
If Not MM_rsUser.EOF Or Not MM_rsUser.BOF Then
' username and password match - this is a valid user
Session("MM_Username") = MM_valUsername
If (MM_fldUserAuthorization <> "") Then
Session("MM_UserAuthorization") = CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization).Value)
Else
Session("MM_UserAuthorization") = ""
End If

if (MM_rsUser.Fields.Item("classID").Value)=1 then
MM_redirectLoginSuccess="aa.asp"
elseif (MM_rsUser.Fields.Item("classID").Value)=2 then
MM_redirectLoginSuccess="bb.asp"
elseif (MM_rsUser.Fields.Item("classID").Value)=3 then
MM_redirectLoginSuccess="cc.asp"
end if
if CStr(Request.QueryString("accessdenied")) <> "" And false Then
MM_redirectLoginSuccess = Request.QueryString("accessdenied")
End If
MM_rsUser.Close
Response.Redirect(MM_redirectLoginSuccess)
End If
MM_rsUser.Close
Response.write("对不起!用户名或密码错误!")
End If
%>



根据用户权限登陆到不同页面


















---------------------------------

“根据用户权限登陆到不同页面”一文发布后,有些网友依照文中介绍的方法实现了相应的功能。可是,出现了这样的一个问题,当用户登陆成功后,如转到AA.asp页,如果我在地址栏中输入BB.asp页的地址,也能转到BB.asp页,输入CC.asp页地址时也能转到CC.asp页,而我在这三个页面中均插入“限制对页的访问”并且选中了“基于以下内容进行限制,用户名、密码和级别”行为,定义好1\2\3这几个级别进行限制。这是什么原因呢?如何改?

这个问题已有一些网友咨询了,下面我们来解决这个问题。

【操作步骤】:

1、新建ASP页,保存为“user.asp”,依照上篇教程设计好数据库表,插入表单和本文域。

2、插入“登陆用户”行为,对应填好各项后,记住选中“基于以下项限制访问”的“用户名、密码和访问级别”单选框,“获取级别自”下拉列表中选中“ClassID”字段。设置好如下图:


3、切换到“代码”视图找到如下图选中部分的语句(第10句):


把这句代码剪切到记事本保存好(这样做的目的是为了工作方便,须要时从记事本中复制过来,不用手工一个个字母地输入,当然你可以把它删除掉)。

4、找到以下图所代码(选中部分):


在它的下一行中,手工输入如下代码:

select case Session("MM_UserAuthorization")
case 1
MM_redirectLoginSuccess="aa.asp"
case 2
MM_redirectLoginSuccess="bb.asp"
case 3
MM_redirectLogi

nSuccess="cc.asp"
end select[page]

代码插入位置以下图所示(选中部分):


这样,登陆页也就做成了。如果你读过上篇教程,发现此处有所不同。这里添加的代码要比上次简单,而对DW MX的代码修改不多,却能达相同的效果。按F12键预览一下,能否识别用户级别,把他带到相应的页面。

到这里,你会发现一个问题,当你以普通会员级别登陆成功转到aa.asp页后,如果在地址栏中输入bb.asp或cc.asp页地址时,也能访问这两个页面,这就失去了安全的意义。下面我们就解决此问题。

5、分别打开aa.asp、bb.asp、cc.asp页。执行“限制对页的访问”命令,弹出设置窗口,在“基于以下内容进行限制”中选中“用户名、密码和访问级别”单选框,单击左边的“定义...”按扭,弹出“定义访问级别”对话框,这个级别值根据各个页面不同等级的用户访问设置,如aa.asp,页,级别为“1”的用户可以访问,就在该页的限制对页的访问行为中定义“访问级别”为“1” 。bb.asp页定义为“2”,依此类推。如下图所示:


好了,各个页面均设置好后,这时,打开登陆页,以普通会员身份登陆到aa.asp页,再尝试在地址栏中输bb.asp或cc.asp页地址,如下图:


按回车键,是否能转到bb.asp页了?哈哈,没门!把你带到出错页no.asp了。如下图:


6、手工写的“限制对页的访问”代码

应用DW MX的服务器行为方便、快捷,但是代码似乎长了些,我们来手工编写达到此功能的代码,但简单哦!

在aa.asp页中输入:

<%
If Session("MM_Username") = "" or Session("MM_UserAuthorization")<>"1" then
response.Write("对不起!请确认你是否具有访问本页的权限!")
response.end
end if
%>

分别在bb.asp和cc.asp页中输入此段代码,不同级别受保护的页面中修改Session("MM_UserAuthorization")<>"相应级别值"就OK了。这段代码一定要放在页面的最顶部!!

相关文档