Wie implementiert ASP hierarchische Berechtigungskontrolle? Ich glaube, dieses Problem hat viele Anfängerprogrammierer verblüfft. Das Folgende ist die Methode, um ASP zur Implementierung einer hierarchischen Berechtigungsregelung basierend auf diesem Problem zu verwenden.
Verwenden Sie ASP, um die hierarchische Berechtigungskontrolle zu implementieren
Dieser Artikel implementiert die Kontrolle hierarchischer Berechtigungen in einem Buchhaltungsmanagementsystem. Das Programm ist in ASP und JavaScript geschrieben und wird auf einem Gewinn -Server ausgeführt, der mit IIS4.0 ausgestattet ist. Es ist schnell und leicht zu warten.
Die Berechtigungsstufen sind wie folgt aufgeteilt:
①. Dekan und Finanzabschnitt Chef: Es können unbegrenzte Anfragen und Statistiken nicht eingeben.
②. Vizepräsident: Wenn Sie nicht eingeben können, können Sie die Konten der zuständigen Abteilung abfragen und zählen.
③. Abteilungsleiter: Wenn Sie nicht eingeben können, können Sie die Konten dieser Abteilung abfragen und zählen.
④. Buchhaltung: Sie können die Konten jeder Abteilung eingeben (ein Buchhalter muss manchmal Konten mehrerer Abteilungen erstellen) und nur die von Ihnen eingegebenen Konten abfragen und zählen.
Die beteiligten Datenbanken und Felder sind wie folgt
①. JK_USER -Datenbank und Felder: ID (Seriennummer), BMID (Abteilungsnummer), Benutzername (Benutzername), PWD (Passwort), rechts (Berechtigungswert);
②. BM -Datenbank und Felder: ID (Seriennummer), BMID (Abteilungsnummer);
③, JZPZ -Datenbank und Felder: ID (Seriennummer), BM (Abteilung), ZGS (Tochtergesellschaft), XMZ (Projektgruppe), XM (Projekt), SR (Revenue), ZC (Ausgaben), SZFX (Revenue Direction), SZXS (Revenue Form),
RQ (Datum), JBR (Manager), LRR (Inpenter), SZSM (eingehende Erklärung);
④, ZGS -Datenbank und Felder: ID (Seriennummer), ZGS (Tochter) Name (Firmenname), BMID (Abteilungsnummer).
1. Überprüfen Sie zunächst die Legalität der Benutzeridentität
Vergleichen Sie den vom Benutzer eingereichten Benutzernamen und Kennwort mit den Feldern in der Datenbank JK_USER, um seine Legalität zu bestimmen. Nur rechtliche Benutzer (der Systemadministrator öffnet ein Konto für sie) können eingeben. Rechtsnutzer haben
Es gibt vier Berechtigungsstufen und vier Berechtigungswerte werden an "1", "2", "3" und "4" gegeben. (Programm weggelassen).
2. Gutscheine -Buchhaltung (Ebene des Level -Berechtigte)
Die Gutschein -Rechnungslegungsfunktion wird speziell für Buchhalter verwendet und kann nicht von anderen verwendet werden. Wenn Sie beispielsweise die Gutscheineintragsschnittstelle als Nicht-Accountant eingeben
Der Knopf ist nicht sichtbar. Die eingegebenen Gutscheine werden zuerst in einer temporären Tabelle gespeichert, die als "nicht berücksichtigte Gutscheinbibliothek" bezeichnet wird. Erst nach Ausführen der Funktion "Gutschein -Buchhaltung" können Sie die Voucher -Bibliothek in die Gutscheine "Uncounted Voucher Library" eingeben.
Überarbeiten. Einige Verfahren sind wie folgt:
"Nicht-Rechnungspersonal eingeben, die Funktionstasten" Gutscheine Buchhaltung "und" Speichern ohne Papiere "werden nicht angezeigt
if (thisfage.firstentered) dann
Wenn Sitzung ("rechts") <> "1" dann
Button1.hide
Button2.Hide
Ende wenn
……………
'Automatisch Zeit und Bediener füllen
Textbox7.Value = Jahr (Datum) & "-" & Monat (Datum) & "-" & Tag (Datum)
Textbox9.Value = session ("Benutzername")
Setzen Sie cnn1 = server.createObject ("adodb.Connection")
Setzen Sie rst1 = server.createObject ("adodb.recordset")
cnn1.cursorLocation = 3
cnn1.ConnectionTimeout = 30
cnn1.open "dsn = jky"
rst1.open "select * from bm", cnn1,1,1, adcmdText
Wenn rst1.recordCount> 0 dann
Rst1.movefirst
Id = rst1.fields ("id")
tun, während nicht rst1.eof
Listbox3.Additem rst1.fields ("BmName"), Cint (rst1.fields ("ID"))
"Response.write rst1.fields (" bmname ") & rst1.fields (" id ")
rst1.Movenext
Schleife
Ende wenn
rst1.close
rst1.open "Wählen Sie ZGSNAME aus ZGS, wobei BMID =" & ID, CNN1,1,1, ADCMDText
Wenn rst1.recordCount> 0 dann
rst1.movefirst
tun, während nicht rst1.eof
ListBox4.Additem CSTR (rst1.fields ("Zgsname"))
rst1.Movenext
Schleife
Ende wenn
rst1.close
CNN1.CLOSE
Rufen Sie Writestern an
Ende wenn
Endfunktion
………………………
'Gutscheinbuchhaltung
sub button2_onclick
dim s
S = ListBox1.SelectedIndex
Antwort.Write s
Ende sub
sub listbox3_onchange
Dim id, ich
i = listBox4.getCount ()
Tu, während ich> -1
Anruflistenbox4.RemoveItem (i)
i = i-1
Schleife
id = listBox3.getValue (ListBox3.SelectedIndex)
Setzen Sie cnn2 = server.createObject ("adodb.Connection").
Setzen Sie rst2 = server.createObject ("adodb.recordset")
cnn2.CursorLocation = 3
cnn2.ConnectionTimeout = 30
cnn2.open "dsn = jky"
rst2.open "Wählen Sie ZGSNAME aus ZGS WHERE BMID =" & ID, CNN2,1,1, ADCMDTEXT
Wenn RST2.RecordCount> 0 dann
RST2.MOVEFIRST
tun, während nicht rst2.eof
ListBox4.Additem CSTR (RST2.Fields ("Zgsname"))
RST2.Movenext
Schleife
Ende wenn
RST2.CLOSE
CNN2.CLOSE
Ende sub
sub button2_onclick
Setzen Sie cnn5 = server.createObject ("adodb.Connection").
cnn5.cursorLocation = 3
cnn5.ConnectionTimeout = 30
cnn5.open "dsn = jky"
cnn5.execute "In JZPZ (BM, ZGS, XMZ, XM, SR, ZC, SZFX, SZXS, RQ, JBR, LRR, SZSM) Wählen
LRR, SZSM von WJZPZ wobei LRR = "" & Session ("Benutzername") & "" ""
cnn5.execute "aus wjzpz löschen wobei lrr =" "& session (" username ") &" ""
Ende sub
3. Datenabfrage (Stufe Berechtigungssteuerung)
Fragen Sie die Felder der Anmeldeinformationen als Bedingung an. Vor den Auswahlkriterien für "√" gibt es eine Box, in der die Bedingung "Abteilung" ausgewählt werden muss (das Programm wird automatisch hinzugefügt), und der Abteilungsinhalt basiert automatisch auf den Berechtigungen des Benutzers.
Rufen Sie den entsprechenden Wert aus der Datenbank an, und der Zweiginhalt wird automatisch gemäß der Abteilung angepasst, zu der sie gehört. Einige Verfahren sind wie folgt:
……………………
'Geben Sie die entsprechende Abfrageschnittstelle gemäß dem Berechtigungswert ein
……………………
Funktion thispage_onenter ()
Setzen Sie cnn1 = server.createObject ("adodb.Connection")
Setzen Sie rst1 = server.createObject ("adodb.recordset")
cnn1.cursorLocation = 3
cnn1.ConnectionTimeout = 30
cnn1.open "dsn = jky"
Wählen Sie die Fallsitzung ("Tright")
Fall "3" Vizepräsident
rst1.open "Select Bm.bmname von JK_USER, BM wobei jk_user.bmid = bm.id und jk_user.username =" "& seision (" username ")
& "" ", CNN1,1, ADCMDText
Wenn rst1.recordCount> 0 dann
Rst1.movefirst
tun, während nicht rst1.eof
ListBox1.Additem CSTR (RST1.Fields ("BmName"))
rst1.Movenext
Schleife
Ende wenn
rst1.close
rst1.open "ZGSNAME aus ZGS auswählen", CNN1,1,1, ADCMDText
Wenn rst1.recordCount> 0 dann
rst1.movefirst
tun, während nicht rst1.eof
Listbox2.Additem CSTR (RST1.Fields ("ZGSname"))
rst1.Movenext
Schleife
Ende wenn
rst1.close
CNN1.CLOSE
Checkbox1.SeTheThecked (True)
Fall "2" Abteilungsleiter
ListBox1.Additem Session ("BM")
rst1.open "Wählen Sie ZGSNAME aus ZGS, wobei BMID =" & Session ("BMID"), CNN1,1,1, ADCMDText
Wenn rst1.recordCount> 0 dann
rst1.movefirst
tun, während nicht rst1.eof
Listbox2.Additem CSTR (RST1.Fields ("ZGSname"))
rst1.Movenext
Schleife
Ende wenn
rst1.close
CNN1.CLOSE
Checkbox1.SeTheThecked (True)
„CheckBox1.0
Fall "1" "Buchhalter
rst1.open "Select BMName aus BM", CNN1,1,1, ADCMDText
Wenn rst1.recordCount> 0 dann
Rst1.movefirst
tun, während nicht rst1.eof
ListBox1.Additem CSTR (RST1.Fields ("BmName"))
rst1.Movenext
Schleife
Ende wenn
rst1.close
rst1.open "ZGSNAME aus ZGS auswählen", CNN1,1,1, ADCMDText
Wenn rst1.recordCount> 0 dann
rst1.movefirst
tun, während nicht rst1.eof
Listbox2.Additem CSTR (RST1.Fields ("ZGSname"))
rst1.Movenext
Schleife
Ende wenn
rst1.close
CNN1.CLOSE
Fall "4" Dean
rst1.open "Select BMName aus BM", CNN1,1,1, ADCMDText
Wenn rst1.recordCount> 0 dann
Rst1.movefirst
tun, während nicht rst1.eof
ListBox1.Additem CSTR (RST1.Fields ("BmName"))
rst1.Movenext
Schleife
Ende wenn
rst1.close
rst1.open "ZGSNAME aus ZGS auswählen", CNN1,1,1, ADCMDText
Wenn rst1.recordCount> 0 dann
rst1.movefirst
tun, während nicht rst1.eof
Listbox2.Additem CSTR (RST1.Fields ("ZGSname"))
rst1.Movenext
Schleife
Ende wenn
rst1.close
CNN1.CLOSE
Ende auswählen
Ende wenn
……………
Endfunktion
'Abfragen von Anmeldeinformationen gemäß den Berechtigungen
sub button1_onclick
Dim rst2, cnn2, str, ich
Dim Bm (1), Zgs (1), xmz (1), xm (1), SZFX (1), SZXS (1), RQ (2), JBR (1)
BM (0) = CheckBox1.getChecked ()
Wenn BM (0) dann
BM (1) = ListBox1.GeteText (ListBox1.SelectedIndex)
str = "und bm =" "& bm (1) &" "" "
Ende wenn
ZGS (0) = CheckBox2.GetChecked ()
Wenn ZGS (0) dann
ZGS (1) = ListBox2.GetText (ListBox2.SelectedIndex)
STR = STR & "und ZGS =" & ZGS (1) & "" ""
Ende wenn
xmz (0) = CheckBox3.getChecked ()
Wenn xmz (0) dann
xmz (1) = trim (txtxmz.Value)
STR = STR & "und XMZ wie"%"& xmz (1) &"%"" "
Ende wenn
XM (0) = CheckBox4.getChecked ()
Wenn xm (0) dann
xm (1) = trimm (tttxm.value)
STR = STR & "und XM wie"%"& xm (1) &"%"" "
Ende wenn
SZFX (0) = CheckBox5.getChecked ()
Wenn SZFX (0) dann
SZFX (1) = ListBox3.GetText (ListBox3.SelectedIndex)
STR = STR & "und SZFX =" "& SZFX (1) &" "" "
Ende wenn
SZXS (0) = CheckBox6.getChecked ()
Wenn SZXS (0) dann
SZXS (1) = ListBox4.GetText (ListBox4.SelectedIndex)
STR = STR & "und SZXS =" "& SZXS (1) &" ""
Ende wenn
JBR (0) = CheckBox8.getChecked ()
Wenn JBR (0) dann
jbr (1) = trim (txtjbr.value)
STR = STR & "und JBR wie"%"& jbr (1) &"%"" "
Ende wenn
Setzen Sie cnn2 = server.createObject ("adodb.Connection").
Setzen Sie rst2 = server.createObject ("adodb.recordset")
cnn2.CursorLocation = 3
cnn2.ConnectionTimeout = 30
cnn2.open "dsn = jky"
Antwort.Write "<table border =" 1 "cellpadding = 0 cellspacing = 0 width =" 650 "height =" 33 ">"
Response.write "<tr>"
Antwort.Write "<td width =" 100%"colspan =" 6 "height =" 44 "align =" Middle "bgcolor = LightBlue>"
Antwort.Write "<P Align =" Center "> <b> <font color ="#000084 "> Buchhaltungsliste der Buchhaltung"
Response.write "</font> </b> </p> </td> </tr>"
Response.write "<tr>"
Antwort.
Antwort.Write "Abteilung </td>"
Antwort.
Antwort.Write "Tochterunternehmen </td>"
Antwort.
Antwort.Write "Projektteam </td>"
Antwort.
Antwort.Write "Projektname/Vertragsnummer </td>"
Antwort.
Antwort.Write "Umsatzbetrag (10.000 Yuan) </td>"
Antwort.
Antwort.Write "Schneidebetrag (10.000 Yuan) </td> </tr>"
Wenn Sitzung ("tright") = "1" dann
"Response.Write" AAAAAAAAAA "
RST2.Open "SELECT * von JZPZ wobei ID> 0 und LRR =" "& Session (" Benutzername ") &" "& str, cnn2,1,1, adcmdText
anders
"Response.write" ffffffffffffffff "
RST2.Open "SELECT * von JZPZ wobei ID> 0" & Str, CNN2,1,1, ADCMDText
Ende wenn
Wenn RST2.RecordCount> 0 dann
RST2.MOVEFIRST
RST2.PAGESIZE = 20
rst2.absolutepage = 1
I = 0
tun, während nicht rst2.eof und ich <rst2.pagesizesize
Response.write "<tr>"
Antwort.
Antwort.
Antwort.
Antwort.Write "<td width =" 15%"bgcolor = lightgrey> <a href =" fmjz1.asp? Id = "& rst2.fields (" id ") &" ""
target = "_ leer"> "& rst2.fields (" xm ") &" </a> </td> "
Antwort.
Antwort.
Response.write "</tr>"
i = i+1
RST2.Movenext
Schleife
Ende wenn
Antwort.Write "</table>"
Response.write "</div>"
J = RST2.PAGECOUNT
Antwort.Write "<P Align = Center> <b> Gesamtzahl der Seiten:"
für i = 1 bis j
Response.write "<a href =" fmjzpzck1.asp? Id = "& i &" "target =" _ leer ">" & i & "</a>" & "" "
Wenn J mod 10 = 0 dann
Response.write "<br>"
Ende wenn
nächste
Response.write "</b> </p>"
RST2.CLOSE
CNN2.CLOSE
……………
Ende sub
Bei der Anwendung der oben genannten Programme können benutzerdefinierte Abfragen gemäß den Berechtigungen des Benutzers und den Anforderungen des Benutzers implementiert werden. Das System läuft und gibt den Sieg NT, IIS4.0, Win98 und PWS aus.
Haben Sie gelernt, wie man hierarchische Berechtigungskontrolle in ASP implementiert? Wenn es noch etwas Unklares gibt, wenden Sie sich bitte an den Herausgeber des Fehlers, und wir werden so schnell wie möglich antworten.