ASPは階層的許可制御をどのように実装しますか?この問題は多くの初心者プログラマーを困惑させたと思います。以下は、ASPを使用してこの問題に基づいて階層的許可制御を実装する方法です。
ASPを使用して、階層的許可制御を実装します
この記事では、会計管理システムにおける階層的権限の制御を実装しています。このプログラムはASPとJavaScriptで記述されており、IIS4.0を搭載したWIN NTサーバーで実行されます。迅速でメンテナンスが簡単です。
許可レベルは次のように分割されます。
①。ディーンとファイナンスセクションのチーフ:入力できません。無制限の問い合わせと統計が見つかります。
②。副社長:入力できない場合は、担当部門のアカウントを照会してカウントできます。
③。部門のリーダー:入力できない場合は、この部門のアカウントを照会してカウントできます。
④。会計:各部門のアカウントを入力することができます(会計士はいくつかの部門のアカウントを作成する必要がある場合があります)。また、自分で入力したアカウントのみを照会してカウントできます。
関係するデータベースとフィールドは次のとおりです
①。 JK_USERデータベースとフィールド:ID(シリアル番号)、BMID(部門番号)、ユーザー名(ユーザー名)、PWD(パスワード)、右(許可値);
②。 BMデータベースとフィールド:ID(シリアル番号)、BMID(部門番号);
③、JZPZデータベースとフィールド:ID(シリアル番号)、BM(部門)、ZGS(子会社)、XMZ(プロジェクトグループ)、XM(プロジェクト)、SR(収益)、ZC(支出)、SZFX(収益方向)、SZXS(収益形式)、
RQ(日付)、JBR(マネージャー)、LRR(入力者)、SZSM(着信声明);
④、ZGSデータベースおよびフィールド:ID(シリアル番号)、ZGS(子会社)名(会社名)、BMID(部門番号)。
1.最初に、ユーザーIDの合法性を確認します
ユーザーが提出したユーザー名とパスワードをデータベースjk_userのフィールドと比較して、その合法性を決定します。法務ユーザー(システム管理者がアカウントを開きます)のみが入力できます。法律ユーザーは持っています
4つの許可レベルがあり、4つの許可値が「1」、「2」、「3」、および「4」に与えられます。 (プログラム省略)。
2。バウチャー会計(レベルの許可制御)
バウチャー会計機能は、会計士に特別に使用されており、他の人が使用することはできません。たとえば、バウチャーエントリインターフェイスを非会計士として入力する場合、「クエリアカウンティングバウチャー」関数ボタンのみが表示され、その他の機能が表示されます。
ボタンが表示されません。入力されたバウチャーは、最初に一時的なテーブルに保存されます。これは「未計上のバウチャーライブラリ」と呼ばれます。 「バウチャーアカウンティング」関数を実行した後のみ、「未計算バウチャーライブラリ」バウチャーにバウチャーライブラリに入力できます。
改訂。いくつかの手順は次のとおりです。
「非会計担当者が入力し、「バウチャー会計」と「文書化されていないバウチャーを保存」関数ボタンが表示されません
if(thispage.firstentered)then
session( "right")<> "1"その後
Button1.hide
Button2.hide
ifを終了します
…………
'時間とオペレーターを自動的に入力します
textbox7.value = year(date)& " - "&month(date)& " - "&day(date)
textbox9.value = session( "username")
cnn1 = server.createobject( "adodb.connection")を設定します
rst1 = server.createObject( "adodb.recordset")を設定します
cnn1.cursorlocation = 3
cnn1.connectiontimeout = 30
cnn1.open "dsn = jky"
rst1.open "select * from bm"、cnn1,1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
id = rst1.fields( "id")
rst1.eofではありません
listbox3.additem rst1.fields( "bmname")、cint(rst1.fields( "id")))
"Response.Write rst1.fields(" bmname ")&rst1.fields(" id ")
rst1.movenext
ループ
ifを終了します
rst1.close
rst1.open "zgsからzgsnameを選択します。ここで、bmid ="&id、cnn1,1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
rst1.eofではありません
listbox4.additem cstr(rst1.fields( "zgsname"))
rst1.movenext
ループ
ifを終了します
rst1.close
cnn1.close
Writerstに電話してください
ifを終了します
エンド関数
……………………
'バウチャー会計
sub button2_onclick
dim s
S = ListBox1.SelectedIndex
Response.Write s
End Sub
sub listbox3_onchange
id、i
i = listbox4.getCount()
i> -1を実行します
listbox4.removeItem(i)を呼び出す
i = i-1
ループ
id = listbox3.getValue(listbox3.selectedIndex)
cnn2 = server.createobject( "adodb.connection")を設定します
rst2 = server.createObject( "adodb.recordset")を設定します
cnn2.cursorlocation = 3
cnn2.connectiontimeout = 30
cnn2.open "dsn = jky"
rst2.open "zgs ="&id、cnn2,1,1、adcmdtextからzgsnameを選択します
rst2.recordcount> 0の場合
rst2.movefirst
rst2.eofではありません
listbox4.additem cstr(rst2.fields( "zgsname"))
rst2.movenext
ループ
ifを終了します
rst2.close
cnn2.close
End Sub
sub button2_onclick
cnn5 = server.createobject( "adodb.connection")を設定します
cnn5.cursorlocation = 3
cnn5.connectiontimeout = 30
cnn5.open "dsn = jky"
cnn5.execute "JZPZ(BM、ZGS、XMZ、XM、SR、ZC、SZFX、SZXS、RQ、JBR、LRR、SZSM)への挿入(BM、ZGS、XMZ、XM、SZXS)SELECT BM、ZGS、XMZ、XM、SR、ZC、SZFX、SZXS、RQ、JBR、JBR、JBR、JBR。
lrr、wjzpzのszsm Where lrr = ""&session( "username")& "" "
cnn5.execute "wjzpzからdelete where lrr =" "&session(" username ")&" ""
End Sub
3。データクエリ(レベル許可制御)
条件として資格情報のフィールドを照会します。 「√」の選択基準の前にボックスがあり、「部門」条件を選択する必要があり(プログラムが自動的に追加されます)、部門のコンテンツはユーザーのアクセス許可に自動的に基づいています。
データベースから対応する値を呼び出すと、ブランチコンテンツが属する部門に従って自動的に調整されます。いくつかの手順は次のとおりです。
…………………
'許可値に従って対応するクエリインターフェイスを入力します
…………………
function thispage_enenter()
cnn1 = server.createobject( "adodb.connection")を設定します
rst1 = server.createObject( "adodb.recordset")を設定します
cnn1.cursorlocation = 3
cnn1.connectiontimeout = 30
cnn1.open "dsn = jky"
ケースセッションを選択します( "Tright")
ケース "3" "副社長
rst1.open "jk_userからbm.bmnameを選択、bm where jk_user.bmid = bm.idおよびjk_user.username =" "&session(" username "))
& "" "、cnn1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
rst1.eofではありません
listbox1.additem cstr(rst1.fields( "bmname"))
rst1.movenext
ループ
ifを終了します
rst1.close
rst1.open "zgsからzgsnameを選択"、cnn1,1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
rst1.eofではありません
listbox2.additem cstr(rst1.fields( "zgsname"))
rst1.movenext
ループ
ifを終了します
rst1.close
cnn1.close
checkbox1.setchecked(true)
ケース「2」部門マネージャー
listbox1.additemセッション( "bm")
rst1.open "zgsからzgsnameを選択します。ここでbmid ="&session( "bmid")、cnn1,1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
rst1.eofではありません
listbox2.additem cstr(rst1.fields( "zgsname"))
rst1.movenext
ループ
ifを終了します
rst1.close
cnn1.close
checkbox1.setchecked(true)
「チェックボックス1.0
ケース "1" "会計士
rst1.open "bm from bm" select bmname "、cnn1,1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
rst1.eofではありません
listbox1.additem cstr(rst1.fields( "bmname"))
rst1.movenext
ループ
ifを終了します
rst1.close
rst1.open "zgsからzgsnameを選択"、cnn1,1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
rst1.eofではありません
listbox2.additem cstr(rst1.fields( "zgsname"))
rst1.movenext
ループ
ifを終了します
rst1.close
cnn1.close
ケース "4"ディーン
rst1.open "bm from bm" select bmname "、cnn1,1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
rst1.eofではありません
listbox1.additem cstr(rst1.fields( "bmname"))
rst1.movenext
ループ
ifを終了します
rst1.close
rst1.open "zgsからzgsnameを選択"、cnn1,1,1、adcmdtext
rst1.recordcount> 0の場合
rst1.movefirst
rst1.eofではありません
listbox2.additem cstr(rst1.fields( "zgsname"))
rst1.movenext
ループ
ifを終了します
rst1.close
cnn1.close
[選択]を終了します
ifを終了します
…………
エンド関数
'許可に応じたクエリ資格情報
sub button1_onclick
dim rst2、cnn2、str、i
DIM BM(1)、ZGS(1)、XMZ(1)、XM(1)、SZFX(1)、SZXS(1)、RQ(2)、JBR(1)
bm(0)= checkbox1.getChecked()
BM(0)の場合
bm(1)= listbox1.getText(listbox1.selectedindex)
str = "およびbm =" "&bm(1)&" ""
ifを終了します
zgs(0)= checkbox2.getChecked()
zgs(0)の場合
zgs(1)= listbox2.getText(listbox2.SelectedIndex)
str = str& "およびzgs ="&zgs(1)& "" "
ifを終了します
xmz(0)= checkbox3.getChecked()
XMZ(0)の場合
xmz(1)= trim(txtxmz.value)
str = str& "およびxmz like"% "&xmz(1)&"% ""
ifを終了します
xm(0)= checkbox4.getChecked()
XM(0)の場合
xm(1)= trim(tztxm.value)
str = str& "and xm like"% "&xm(1)&"% ""
ifを終了します
szfx(0)= checkbox5.getChecked()
SZFX(0)の場合
szfx(1)= listbox3.getText(listbox3.selectedIndex)
str = str& "およびszfx =" "&szfx(1)&" ""
ifを終了します
szxs(0)= checkbox6.getChecked()
SZXS(0)の場合
szxs(1)= listbox4.getText(listbox4.SelectedIndex)
str = str& "およびszxs =" "&szxs(1)&" ""
ifを終了します
jbr(0)= checkbox8.getChecked()
JBR(0)の場合
jbr(1)= trim(txtjbr.value)
str = str& "and jbr like"% "&jbr(1)&"% ""
ifを終了します
cnn2 = server.createobject( "adodb.connection")を設定します
rst2 = server.createObject( "adodb.recordset")を設定します
cnn2.cursorlocation = 3
cnn2.connectiontimeout = 30
cnn2.open "dsn = jky"
response.write "<table border =" 1 "cellpadding = 0 cellspacing = 0 width =" 650 "height =" 33 ">"
Response.Write "<tr>"
Response.Write "<td width =" 100% "colspan =" 6 "height =" 44 "align =" middle "bgcolor = lightblue>"
Response.Write "<p align =" center "> <b> <font color ="#000084 ">会計バウチャーリスト" "
Response.Write "</font> </b> </p> </td> </tr>"
Response.Write "<tr>"
Response.Write "<td width =" 15% "bgcolor = lightsteelblue>"
Response.Write "部門</td>"
Response.Write "<td width =" 20% "bgcolor = lightsteelblue>"
Response.Write「子会社</td>」
Response.Write "<td width =" 15% "bgcolor = lightsteelblue>"
Response.Write "Project Team </td>"
Response.Write "<td width =" 15% "bgcolor = lightsteelblue>"
Response.Write「プロジェクト名/契約番号</td>」
Response.Write "<td width =" 15% "bgcolor = lightsteelblue>"
Response.Write「収益額(10,000元)</td>」
Response.Write "<td width =" 15% "bgcolor = lightsteelblue>"
response.write "excension on of(10,000 yuan)</td> </tr>"
session( "tright")= "1"その後
「Response.Write」aaaaaaaa "
rst2.open "select * from jzpz from id> 0およびlrr =" "&session(" username ")&" "&str、cnn2,1,1、adcmdtext
それ以外
「Response.Write」ffffffffffffff」
rst2.open "select * from jzpz where id> 0"&str、cnn2,1,1、adcmdtext
ifを終了します
rst2.recordcount> 0の場合
rst2.movefirst
rst2.pagesize = 20
rst2.absolutepage = 1
i = 0
rst2.eofおよびi <rst2.pagesizeではありません
Response.Write "<tr>"
Response.Write "<td width =" 15% "bgcolor = lightgrey>"&rst2.fields( "bm")& "</td>"
Response.Write "<td width =" 15% "bgcolor = lightgrey>"&rst2.fields( "zgs")& "</td>"
Response.Write "<td width =" 15% "bgcolor = lightgrey>"&rst2.fields( "xmz")& "</td>"
Response.Write "<td width =" 15% "bgcolor = lightgrey> <a href =" fmjz1.asp?id = "&rst2.fields(" id ")&" "
ターゲット= "_ blank"> "&rst2.fields(" xm ")&" </a> </td> "
Response.Write "<td width =" 5% "bgcolor = lightgrey>"&rst2.fields( "sr")& "</td>"
Response.Write "<td width =" 5% "bgcolor = lightgrey>"&rst2.fields( "zc")& "</td>"
Response.Write "</tr>"
i = i+1
rst2.movenext
ループ
ifを終了します
Response.Write "</table>"
Response.Write "</div>"
j = rst2.pagecount
response.write "<p align = center> <b>ページの総数:"
i = 1からjの場合
respons.write "<a href =" fmjzpzck1.asp?id = "&i&" "ターゲット=" _ blank ">"&i& "</a>"& ""
J mod 10 = 0の場合
Response.Write "<br>"
ifを終了します
次
Response.Write "</b> </p>"
rst2.close
cnn2.close
…………
End Sub
上記のプログラムを適用する場合、カスタムクエリはユーザーの許可に従って、およびユーザーの要件に従って実装できます。システムは、Win NT、IIS4.0、Win98、およびPWSを実行して渡します。
ASPに階層的許可制御を実装する方法を学びましたか?まだ不明なものがある場合は、バグの編集者に相談してください。できるだけ早く返信します。