用户权限管理系统
用户权限管理系统 1 引 言
当前,企业的信息化和管理的网络化成为趋势,越来越多的企业构建自己的信息管理平台,实现管理手段的信息化,优化企业组织结构,提高企业对市场的灵敏度和竞争力。但将管理信息放到网络上,如何管理分配和控制用户的权限成为影响管理信息安全性的重要问题。
ASP(Active Server Pages,动态服务网页)是Microsoft公司于1996年年底推出的服务器端Web应用程序开发技术。ASP的脚本都在服务器端执行,提供了许多服务器端的对象和组件,返回给客户端的制式
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
的Html页面,这样既降低了对客户端浏览器的要求,又是程序的安全性得到了保证,同时也使得我们可以对不同的用户提供不同的页面。另外,ASP还可以利用ADO(ActiveX Database Objecct)组件提供给更加简单有效的访问数据库,并且支持几乎所有的脚本语言。
综合ASP以上特点可以看出,使用ASP技术可以方便的开发出功能强大的服务器端用户权限管理系统,下面用一个实例来说明开发过程。
2 实例剖析
2.1 系统描述
该系统是用ASP为某公司企业的MIS系统开发用户权限管理系统,要求实现以下功能:
(1) 用户要分级别,不同级别具有不同权限(访问不同资源)。 (2) 一台计算机上可以有多个不同权限的用户。
(3) 一个用户在不同的计算机上具有相同的权限。
(4) 某些用户在自己计算机上无需输入用户名和密码,可自动登录。 (5) 用户管理支持IP地址的通配符和连接符。
2.2 数据库的设计
首先,根据该企业的要求将用户按照访问的对象划分成不同的权限级别;自动登录用户的IP要单独存放,便于查询。因此,在Userid.mdb中建立了两张表(见表1和表2)分别存放用户主要信息和自动登录用户的IP地址。
表1 用户信息表(user)
字段名称 数据类型 字段说明
Id 文本 用户名
Password 文本 密码
Access_level 文本 用户类型(用0,1字符串表示) Count 文本 访问次数 Ip_address 文本 IP地址
Menu_name 文本 菜单文件的路径和名称 Op_check 文本 用户附加选项(自动登录、用户修改密码) Del_flag 文本 删除标记(1表示删除)
No 文本 用户编号
表2 自动登录IP地址表(Autologin)
字段名称 数据类型 字段说明
Ip_address 文本 自动登录的IP地址
在User表中,Access_level字段用以0或1组成的5b字符串表示不同的用户级别(管理员、高级用户、中级用户、普通用户和自定义用户),每一位表示一种级别,“0”无效,“1”有效;如,“10000”表示该用户具有管理员权限;各级别能够访问的对象显示在网页左边的树型菜单控件中,不同的用户显示不同的菜单,菜单的内容存放在相应的文件中,通过Menu_name字段来调用;Ip_address字段支持在IP地址第三、四段使用通配符“*”和连接符“-”,如,“792.168.2.*”, “192.168.151-153.10-100”;Op_check字段用2位0,1字符串表示用户附加选项,如“01”表示允许用户修改密码,“10”表示该用户为自动登录用户。
在Autologin表中,Ip_address字段用来存发User中Op_check字段第一位是“1”的用户的IP地址。
2.3 系统
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
系统流程图如图一所示。用户登录首先由check.asp获取用户的IP信息,到数据库Userid.mdb的Autologin表中查找该IP信息,到数据库Userid.mdb的Autologin表中查找该IP是否为自动登录的用户。如果是,从User表中获取对应的权限,直接进入系统的主页;如果不是,就进入Login.asp,要求用户输入用户名、密码,通过验证后,获取相应的权限,进入系统主页。
check.asp-login.asp
用户访问 判断是否为自动登录 系统L
及获取用户权限信息 主 页
用户权限信息
用户数据库
Userid.mdb
图1 用户登录流程
2.4 用ASP.net实现系统
ASP.net提供了内置的Session对象,以用来访问存储于用户的局部会话空间中的变量和对象,可以实现多个网页本地数据的共享和相互间的数据传递;本系统的许多全局信息就是采用这种方式来传递的,如,菜单文件的路径等。
当用户通过浏览器访问时,首先使用ASP.net内置的服务器端变量获取用户的IP地址,判断该用户是否为自动登录,实现的代码如下:
Ip-ad=reqeest.ServerVariables(“REMOTE_ADDR”)
//获得用户ip地址
If CheckIP(ip_ad)Then?Check(ip_ad)?
//检验是否为自动登录用户
Session(“passed“)=True
//Passed为True表示通过验证
Logon=True //写入日志文件
SetMyFileObject = Server.createobject(“scripting.filesyatemobject”)
Physicalpath=Server.MapPath(“global/win.ins”)
Set MyTextFile=MyFileObject.OpenTextFile
(PhysicalPath,8,true)MyTextFile.WriteLine(now()&”用户名”
&ID&“IP地址为“&ip_ad&”自动登录网络”)
MyTextFile.Close
End if
函数Check(ip_ad)作用是检查IP地址为ip_ad的用户是否为自动登录用户,如果是,就返回true;同时获取该用户对应的权限和级别;如果不是,就返回False。具体代码如下:
//实现自动登录用户判断的函数
Function CheckIP(ip_ad)
//连接Userid.mdb数据库
Set conn=Server.CreateObject(“ADODB.connection”) Param = “driver ={Microsoft Access Driver(*.mdb)}” Conn.Openparam&”;dbq=”&Server.MapPath(“”userid.mdb”)&; Pwd=access_level”
Sql = “Select ip_adress Form autologin”
//打开自动登录Autologin表 Set rs = server.CreateObject(“ADODB.Recordset”)
Rs.Open sql,conn
Rs.CacheSize=5
If rs.EOF then //如果有自动登录用户,则返回False
CheckIP = False
Rs.close
Else
Rs.movefirst
Do while (not rs.cof) and (flag - false)
Flag = Ture
Ip_auto=rs(0)
//从Autologin表中获得IP地址进行比较
For i=1 to 4
//如果为“*”,则不用比较,实现通配符操作
If Getip (rs(0),i)<>”*”then
//Getip(ip_ad,n)函数,实现了IP地址连接符的使用
If Getip (ip_ad,i)<>Getip(rs(0),i)then
Flag = false
Ip_auto=””
End if
End if
Next
Rs.movenext
Loop
CheckIP = false
If flag = true then
//如果在Autologin表中查找到符合太监的
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
If rs.RecordCount<=1 then
//如果Autologin表中只有一条记录
Rs.MoveFirst
Else
If rs.EOF then //如果符合条件的是最后一条记录
Rs.Movel,ast
Else
Rs.Move-1
End if
End if
CheckIP = true //设定返回值为True
//按查找的IP地址到User表中查找相应的权限 Sql1 = “select * from user Where ip_address = „”&ip_auto&”?” Set rsl = con.execute(sql1)
If not rsl.EOF then
Counter=cint(rsl(3))+1 //访问计数加1
Session(“ID”)=rsl(“id”)
//获取用户名,存入Session变量中共享
//查找用户对应的菜单文件和IP地址以及类型
Set rsl=conn.execute(“update user set count =”&counter&”
Where ip_adress = „”&ip_auto&”?” )
//更新访问次数
Sql2 = “select * from user
where ip_adress = „”&ip_auto&”?”
set rs2=conn.execute(sql2)
session(“access”)=rs2(“Access_level”)
//获取权限
Session(“user_menu”)=rs2 (5)
//获取用户的菜单文件路径
Session(“user_op”)=rs2 (6)
//获取用户的附加选项
End if
End if
End if
Conn.close
End Function
函数Getid(ip_ad,n)的作用是实现IP地址第三段和第四段中的连 接符使用,ip_ad为要检查的ip地址变量,n表示要检查的是IP地 址的第n段内容,如果找到则返回对应的值,否则返回999.主要代 码如下:
//实现网段连接符-,要把userid和ip_address字段长度改为24 Function Getid(ip_ad,n)
If n=1 then
I=instr(1,ip_ad,“.”)
Getid=mid(ip_ad,l,i-1)
End if
If n=3 then
I=instr(l,ip_ad,”.”)
i=instr(i+1,ip_ad,”.”)
j=instr(i+1,ip_ad,”.”)
//实现IP地址第三部分网段划分
Ip_3=mid(ip_ad,i+1,j-i-1)
If instr(1,ip_3,”-”)=0 then
//如果第三部分没有使用连接符,就直接赋值
Getip=ip_3
Else i=instr(l,ip_3,”-”)
//如果第三部分使用了连接符,则进行分解 J=len(ip_3)
Ip_f=mid(ip_3,l,i-1) //获取开始的位置 Ip_b=right(ip_3,j-i) //获取结束的位置 Ip.test = Request.ServerVariables(“REMOTE_ADDR”)
//获得用户IP地址 I=instr(l,ip_test,”.”)
I=instr(i+1,ip_test,”.”)
J=instr(i+1,ip_test,”.”)
Ip u=mid(ip_test,i+1,j-i-1)
//比较用户的IP地址的第三部分是否符合要求 If (cint(ip_u)>)>=cint(ip_f) and (cint(ip_u)<=cint(ip_b))then
Getip=ip_u
Else
Getip=999
End if
End if
End
If n=4 then
I=instr(l,ip_ad,”.”)
End Function
如果不是自动登录的用户,则进入Longin.asp页面,要求其输入用户名和密码。
ID=Request(“ID”) //输入用户名
Pwd = Request(“Pwd”) //输入密码
If ID=””Then
Head = “请输入用户名和密码”
Elself Not CheckPwd(ID,Pwd,ip_ad)Then
Head = “用户名称或密码错误”
Else
Session(“passed”)=True
Session(“ID”)=ID
Logon=True
End if
函数CheckPwd(ID,Pwd,ip_ad)的作用是检查用户名为ID,密码为Pwd,IP地址为ip_ad的用户是否合法,如果合法就获取其相应的权限。该函数的实现具体的代码可参考函数CheckIP(ip_ad)。
本系统主网页是一个框架网页,左面调用了一个树型菜单控件,根据不同的用户类别显示不同的菜单,实现代码如下:
”>
用一个Session变量来给控件的参数赋值,实现对显示菜单的控制。
该系统使用ASP技术将用户的权限控制为两层: (1) 根据用户不同的权限显示不同的菜单,如果用户无权访问某个页
面(资源),就不将该页面的链接显示在左边的菜单中,这样不仅
可以防止用户得知一些不该知道的地址,还可以使用户操作变得
简单明了。
(2) 在用户对某个页面发出请求是再次判断用户的权限,即判断
Session(“Access”)的值,只有当用户具有访问权限时才将页面发送
给用户,否则返回无权查看信息,实现代码如下:
” then%> <%if mid(Session(“access”),3,1)=”1
……..
页面内容
……..
<%else%>
对不起,权限不够
<%end if%>
即使用户通过其他途径知道页面的地址,在浏览其中直接注入
页面的地址也无权进入页面。
3 结语
ASP.net技术由于内置功能强大的组件,较高的安全性能,已成为网络开发中的一种流行的语言。本文介绍的基于ASP.net的用户权限管理的方法,不仅使得分配用户权限更加灵活、有效,也对用户的访问权限给予了强有力的控制,当然系统的安全是多方面的,本系统还
要和其他安全措施配合使用,才能更加有效地发挥作用。
参考
资料
新概念英语资料下载李居明饿命改运学pdf成本会计期末资料社会工作导论资料工程结算所需资料清单