本文实现的是一个帐务管理系统中分级权限的控制
程序使用ASP和JavaScript编写
在装有IIS
的win NT服务器上运行
速度快
易维护
权限级别划分如下
①院长和财务科长不能输入可以无限制查询统计
②副院长不能输入可以查询统计其分管部门的帐务
③部门领导不能输入可以查询统计本部门的帐务
④会计能输入各部门的帐务(一个会计有时要做几个部门的帐)只能查询统计自己输入的帐务
涉及的数据库和字段如下
①JK_USER数据库及字段id(序列号)bmid(部门号)username(用户名)pwd(口令)right(权限值)
②BM数据库及字段:id(序列号) bmid(部门号)
③JZPZ数据库及字段id(序列号)bm(部门) zgs(子公司)xmz(项目组)xm(项目)sr(收入)zc(支出)szfx(收支方向)szxs(收支形式)rq(日期)jbr(经办人)lrr(录入人)szsm(收支说明)
④ZGS数据库及字段id(序列号)zgs(子公司)name(公司名)bmid(部门编号)
.首先进行用户身份合法性验证
将用户提交的用户名和口令与数据库JK_USER中的字段对照对照以确定其合法性只有合法的用户(系统管理员为其开过户)才可以进入合法用户有四种权限级别分别赋予四种权限值(程序略)
.凭证记帐(分级权限控制)
凭证记帐功能是专为会计人员服务的其他人不可以使用如以非会计人员身份进入凭证录入界面时只有查询记帐凭证功能按钮可见其它功能按钮不可见录入的凭证先存放在一个临时表里称为未记帐凭证库只有运行凭证记帐功能后才进入凭证库在未记帐凭证库中的凭证可以修改部分程序如下
非会计人员进入不显示凭证记帐和保存未记帐凭证功能按钮
if (thisPagefirstEntered) then
if session(tright)<> then
buttonhide
buttonhide
end if
…………
自动填写时间和操作人
Textboxvalue=year(date) & & month(date) & & day(date)
Textboxvalue =session(username)
set cnn=serverCreateObject(nnection)
set rst=serverCreateObject(adodbrecordset)
cnnCursorLocation=
cnnConnectionTimeout =
cnnOpen DSN=jky
rstOpen select * from bm cnnadcmdtext
if rstRecordCount > then
RSTMoveFirst
Id=rstFields(id)
do while not rstEOF
ListboxaddItem rstFields(bmName)cint(rstFields(id))
ResponseWrite rstFields(bmname) & rstFields(id)
rstMoveNext
loop
end if
rstClose
rstOpen select zgsname from zgs where bmid= & idcnnadcmdtext
if rstRecordCount > then
rstMoveFirst
do while not rstEOF
ListboxaddItem cstr(rstFields(zgsname))
rstMoveNext
loop
end if
rstClose
cnnclose
call writerst
end if
end function
………………
凭证记帐
sub button_onclick
dim s
s=ListboxselectedIndex
ResponseWrite s
end sub
sub listbox_onchange
dim idi
i=ListboxgetCount()
do while i>
call ListboxremoveItem(i)
i=i
loop
id=listboxgetValue (listboxselectedIndex)
set cnn=serverCreateObject(nnection)
set rst=serverCreateObject(adodbrecordset)
cnnCursorLocation=
cnnConnectionTimeout =
cnnOpenDSN=jky
rstOpen select zgsName from zgs where bmid= & idcnnadcmdtext
if rstRecordCount > then
RSTMoveFirst
do while not rstEOF
ListboxaddItem cstr(rstFields(zgsName))
rstMoveNext
loop
end if
rstClose
cnnClose
end sub
sub button_onclick
set cnn=serverCreateObject(nnection)
cnnCursorLocation=
cnnConnectionTimeout =
cnnOpenDSN=jky
cnnExecute insert into jzpz(bmzgsxmzxmsrzcszfxszxsrqjbrlrrszsm) select bmzgsxmzxmsrzcszfxszxsrqjbrlrrszsm from wjzpz where lrr= & session(username) &
cnnExecute delete from wjzpz where lrr= & session(username) &
end sub
数据查询(分级权限控制)
以凭证的字段为条件进行查询在供选条件前有一方框供打√其中部门条件必选(程序自动加上)部门内容由程序根据用户的权限自动从数据库中调用相应值分公司内容根据所属部门自动调整部分程序如下
……………
根据权限值进入相应的查询界面
……………
function thisPage_onenter()
set cnn=serverCreateObject(nnection)
set rst=serverCreateObject(adodbrecordset)
cnnCursorLocation=
cnnConnectionTimeout =
cnnOpen dsn=jky
select case session(Tright)
case 副院长
rstOpen select bmbmName from jk_user bm where JK_userbmid=bmid and jk_userusername =& session(username) & cnnadcmdtext
if rstRecordCount > then
RSTMoveFirst
do while not rstEOF
ListboxaddItem cstr(rstFields(bmName))
rstMoveNext
loop
end if
rstClose
rstOpen select zgsname from zgs cnn