Comment ASP implémente-t-il le contrôle d'autorisation hiérarchique? Je crois que ce problème a perplexe de nombreux programmeurs novices. Ce qui suit est la méthode d'utilisation de l'ASP pour implémenter le contrôle d'autorisation hiérarchique en fonction de ce problème.
Utilisez ASP pour implémenter le contrôle d'autorisation hiérarchique
Cet article met en œuvre le contrôle des autorisations hiérarchiques dans un système de gestion comptable. Le programme est écrit en ASP et JavaScript et s'exécute sur un serveur WIN NT équipé de IIS4.0. Il est rapide et facile à entretenir.
Les niveaux d'autorisation sont divisés comme suit:
①. Dean et section Finance Chef: ne peut pas entrer, des enquêtes et des statistiques illimitées peuvent être trouvés;
②. Vice-président: Si vous ne pouvez pas entrer, vous pouvez interroger et compter les comptes du département en charge;
③. Directeur du département: Si vous ne pouvez pas entrer, vous pouvez interroger et compter les comptes de ce département;
④. Comptabilité: Vous pouvez saisir les comptes de chaque département (un comptable doit parfois faire des comptes de plusieurs départements), et vous ne pouvez que vous interroger et compter les comptes que vous avez saisis par vous-même.
Les bases de données et les champs impliqués sont les suivants
①. JK_USER Base de données et champs: ID (numéro de série), BMID (numéro de département), nom d'utilisateur (nom d'utilisateur), PWD (mot de passe), droite (valeur d'autorisation);
②. Base de données BM et champs: ID (numéro de série), BMID (numéro de département);
③, JZPZ Database and Fields: ID (numéro de série), BM (département), ZGS (filiale), XMZ (groupe de projet), XM (projet), SR (Revenue), ZC (dépenses), SZFX (Direction des revenus), SZXS (Formulaire de revenus),
RQ (Date), JBR (Manager), LRR (Influeter), SZSM (énoncé entrant);
④, ZGS Base de données et champs: ID (numéro de série), Nom de ZGS (filiale) (nom de l'entreprise), BMID (numéro de département).
1. Premièrement, vérifiez la légalité de l'identité de l'utilisateur
Comparez le nom d'utilisateur et le mot de passe soumis par l'utilisateur avec les champs de la base de données jk_user pour déterminer sa légalité. Seuls les utilisateurs légaux (l'administrateur système ouvre un compte pour eux) peuvent entrer. Les utilisateurs juridiques ont
Il y a quatre niveaux d'autorisation et quatre valeurs d'autorisation sont données à "1", "2", "3" et "4". (Programme omis).
2. Comptabilité de bon (Contrôle d'autorisation de niveau)
La fonction de comptabilité du bon est spécialement utilisée pour les comptables et ne peut pas être utilisée par d'autres. Par exemple, lors de la saisie de l'interface d'entrée de bon en tant que non-responsable, seule le bouton "Requête de la comptabilité de requête" peut être vu et d'autres fonctions
Le bouton n'est pas visible. Les bons entrés sont d'abord stockés dans une table temporaire, qui s'appelle la "bibliothèque de bons non comptabilisée". Ce n'est qu'après l'exécution de la fonction "Verger Accounting" que vous pouvez saisir la bibliothèque de bons dans les bons de la bibliothèque de bons non comptabilisés ".
Réviser. Certaines procédures sont les suivantes:
Le personnel du "Personnel non de la contrainte entre, les boutons de fonction" comptabilité de bone "et" Enregistrer les boutons sans papiers "ne s'affichent pas
if (thispage.firsentered) alors
Si session ("à droite") <> "1" alors
Button1.Hide
Button2.
terminer si
…………
'Remplissez automatiquement le temps et l'opérateur
TextBox7.Value = Year (Date) & "-" & Mois (Date) & "-" & Day (Date)
TextBox9.Value = session ("nom d'utilisateur")
Définir CNN1 = Server.CreateObject ("Adodb.Connection")
set rst1 = server.createObject ("adodb.recordSet")
cnn1.cursorlocation = 3
CNN1.ConnectionTimeout = 30
cnn1.open "dsn = jky"
RST1.Open "SELECT * FROM BM", CNN1,1,1, ADCMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
Id = rst1.fields ("id")
faire tout en ne censément pas 1.eof
Listbox3.additem rst1.fields ("bmname"), Cint (rst1.fields ("id"))
"Response.write rst1.fields (" bmname ") & rst1.fields (" id ")
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
rst1.open "Sélectionnez ZgsName dans Zgs où Bmid =" & id, CNN1,1,1, AdcMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
faire tout en ne censément pas 1.eof
Listbox4.additem cstr (rst1.fields ("zgsname"))
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
cnn1.close
appeler le scénariste
terminer si
fonction finale
……………………
'Comptabilité de bon
sous-bouton2_onclick
sombre
s = listbox1.selectedIndex
Réponse.WRITE S
Sub-Sub
sous-listbox3_onchange
id dim, je
i = listbox4.getCount ()
faire pendant que je> -1
Call listbox4.removeItem (i)
i = i-1
boucle
id = listbox3.getValue (listbox3.selectedIndex)
définir cnn2 = server.createObject ("adodb.connection")
set rst2 = server.createObject ("adodb.recordSet")
cnn2.cursorlocation = 3
CNN2.ConnectionTimeout = 30
cnn2.open "dsn = jky"
RST2.Open "Sélectionnez ZgsName dans Zgs où Bmid =" & id, CNN2,1,1, ADCMDText
Si RST2.RecordCount> 0 alors
RST2.MoveFirst
faire tout en ne censément pas
Listbox4.additem cstr (rst2.fields ("zgsname"))
RST2.MOVENEXT
boucle
terminer si
RST2.Close
CNN2.Close
Sub-Sub
sous-bouton2_onclick
Définir CNN5 = Server.CreateObject ("Adodb.Connection")
cnn5.cursorlocation = 3
CNN5.ConnectionTimeout = 30
CNN5.Open "DSN = JKY"
CNN5.Exécute "Insérer dans JZPZ (BM, ZGS, XMZ, XM, SR, ZC, SZFX, SZXS, RQ, JBR, LRR, SZSM) SELECT BM, ZGS, XMZ, XM, SR, ZC, SZFX, SZXS, RQ, JBR,
lrr, szsm de wjzpz où lrr = "" & session ("nom d'utilisateur") & "" "
CNN5.ExECUTE "Supprimer de wjzpz où lrr =" "& session (" nom d'utilisateur ") &" ""
Sub-Sub
3. Requête de données (contrôle d'autorisation de niveau)
Interroger avec les champs des informations d'identification comme condition. Il y a une boîte avant les critères de sélection pour "√", où la condition "Département" doit être sélectionnée (le programme est automatiquement ajouté), et le contenu du département est automatiquement basé sur les autorisations de l'utilisateur.
Appelez la valeur correspondante de la base de données et le contenu de la branche sera automatiquement ajusté en fonction du département auquel il appartient. Certaines procédures sont les suivantes:
…………………
'Entrez l'interface de requête correspondante en fonction de la valeur d'autorisation
…………………
fonction thispage_onenter ()
Définir CNN1 = Server.CreateObject ("Adodb.Connection")
set rst1 = server.createObject ("adodb.recordSet")
cnn1.cursorlocation = 3
CNN1.ConnectionTimeout = 30
cnn1.open "dsn = jky"
Sélectionnez la session de cas ("tright")
Affaire "3" "vice-président
rst1.open "sélectionnez bm.bmname dans jk_user, bm où jk_user.bmid = bm.id et jk_user.username =" "& session (" nom d'utilisateur ")
& "" ", CNN1,1, ADCMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
faire tout en ne censément pas 1.eof
Listbox1.additem cstr (rst1.fields ("bmname"))
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
rst1.open "Sélectionnez ZgsName dans ZGS", CNN1,1,1, ADCMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
faire tout en ne censément pas 1.eof
Listbox2.additem cstr (rst1.fields ("zgsname"))
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
cnn1.close
Checkbox1.SetheCked (true)
Affaire "2" Directeur de département
Listbox1.Additem Session ("BM")
RST1.Open "Sélectionnez ZgsName dans ZGS Where Bmid =" & Session ("BMID"), CNN1,1,1, ADCMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
faire tout en ne censément pas 1.eof
Listbox2.additem cstr (rst1.fields ("zgsname"))
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
cnn1.close
Checkbox1.SetheCked (true)
«Checkbox1.0
Cas "1" "comptable
RST1.Open "Sélectionner BMNAME FROM BM", CNN1,1,1, ADCMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
faire tout en ne censément pas 1.eof
Listbox1.additem cstr (rst1.fields ("bmname"))
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
rst1.open "Sélectionnez ZgsName dans ZGS", CNN1,1,1, ADCMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
faire tout en ne censément pas 1.eof
Listbox2.additem cstr (rst1.fields ("zgsname"))
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
cnn1.close
Case "4" Dean
RST1.Open "Sélectionner BMNAME FROM BM", CNN1,1,1, ADCMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
faire tout en ne censément pas 1.eof
Listbox1.additem cstr (rst1.fields ("bmname"))
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
rst1.open "Sélectionnez ZgsName dans ZGS", CNN1,1,1, ADCMDText
Si RST1.RecordCount> 0 alors
RST1.MoveFirst
faire tout en ne censément pas 1.eof
Listbox2.additem cstr (rst1.fields ("zgsname"))
RST1.MOVENEXT
boucle
terminer si
RST1.CLOSE
cnn1.close
fin de sélection
terminer si
…………
fonction finale
'Requête des références selon les autorisations
sous-bouton1_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 ()
Si bm (0) alors
bm (1) = listbox1.getText (listbox1.selectedIndex)
str = "et bm =" "& bm (1) &" ""
terminer si
zgs (0) = checkbox2.getchecked ()
Si zgs (0) alors
zgs (1) = listbox2.getText (listbox2.selectedIndex)
str = str & "et zgs =" & zgs (1) & "" "
terminer si
xmz (0) = checkbox3.getchecked ()
Si xmz (0) alors
xmz (1) = TRIM (txtxmz.value)
str = str & "et xmz like"% "& xmz (1) &"% ""
terminer si
xm (0) = checkbox4.getChecked ()
Si xm (0) alors
XM (1) = TRIM (TZTXM.VALUE)
str = str & "et xm comme"% "& xm (1) &"% ""
terminer si
szfx (0) = checkbox5.getchecked ()
Si szfx (0) alors
szfx (1) = listbox3.getText (listbox3.selectedIndex)
str = str & "et szfx =" "& szfx (1) &" ""
terminer si
szxs (0) = checkbox6.getchecked ()
Si szx (0) alors
szxs (1) = listbox4.getText (listBox4.SelectedIndex)
str = str & "et szxs =" "& szxs (1) &" ""
terminer si
jbr (0) = checkbox8.getchecked ()
Si jbr (0) alors
jbr (1) = trim (txtjbr.value)
str = str & "et jbr comme"% "& jbr (1) &"% ""
terminer si
définir cnn2 = server.createObject ("adodb.connection")
set rst2 = server.createObject ("adodb.recordSet")
cnn2.cursorlocation = 3
CNN2.ConnectionTimeout = 30
cnn2.open "dsn = jky"
Response.Write "<Table Border =" 1 "CELLPADDING = 0 CELLSPACINE = 0 width =" 650 "height =" 33 ">"
Réponse.WRITE "<TR>"
Response.Write "<td width =" 100% "Colspan =" 6 "height =" 44 "align =" middle "bgColor = LightBlue>"
Response.Write "<p align =" Center "> <b> <font color =" # 000084 "> Liste des bons comptables"
Réponse.write "</font> </b> </p> </td> </tr>"
Réponse.WRITE "<TR>"
Response.Write "<td width =" 15% "bgcolor = LightSteelBlue>"
Response.Write "Department </td>"
Réponse.Write "<td width =" 20% "bgcolor = lightsteelblue>"
Response.Write "Filiales </td>"
Response.Write "<td width =" 15% "bgcolor = LightSteelBlue>"
Response.Write "Project Team </TD>"
Response.Write "<td width =" 15% "bgcolor = LightSteelBlue>"
Response.Write "Nom du projet / numéro de contrat </td>"
Response.Write "<td width =" 15% "bgcolor = LightSteelBlue>"
Response.Write "Montant de revenus (10 000 yuans) </td>"
Response.Write "<td width =" 15% "bgcolor = LightSteelBlue>"
Response.Write "Montant d'expression (10 000 yuans) </td> </tr>"
Si session ("tright") = "1" alors
"Response.write" aaaaaaaaaa "
RST2.Open "SELECT * FROM JZPZ WHERE ID> 0 et LRR =" "& Session (" Username ") &" "" & Str, Cnn2,1,1, AdcmDtext
autre
"Response.write" ffffffffffffff "
RST2.Open "SELECT * FROM JZPZ WHERE ID> 0" & STR, CNN2,1,1, ADCMDText
terminer si
Si RST2.RecordCount> 0 alors
RST2.MoveFirst
RST2.PageSize = 20
RST2.Absolutepage = 1
i = 0
faire tout en ne censément pas.
Réponse.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>"
Réponse.write "<td width =" 15% "bgcolor = Lightgrey> <a href =" fmjz1.asp? Id = "& rst2.Fields (" id ") &" "
Target = "_ 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>"
Réponse.write "</tr>"
i = i + 1
RST2.MOVENEXT
boucle
terminer si
Réponse.WRITE "</ Table>"
Réponse.write "</div>"
J = RST2.PageCount
Response.Write "<p align = Center> <b> Nombre total de pages:"
pour i = 1 à j
Réponse.write "<a href =" fmjzpzck1.asp? Id = "& i &" "cible =" _ blanc ">" & i & "</a>" & ""
Si j mod 10 = 0 alors
Réponse.WRITE "<br>"
terminer si
suivant
Réponse.write "</b> </p>"
RST2.Close
CNN2.Close
…………
Sub-Sub
Lors de l'application des programmes ci-dessus, les requêtes personnalisées peuvent être implémentées en fonction des autorisations de l'utilisateur et en fonction des exigences de l'utilisateur. Le système s'exécute et passe sur Win NT, IIS4.0, Win98 et PWS.
Avez-vous appris à implémenter le contrôle de l'autorisation hiérarchique dans ASP? S'il y a encore quelque chose de clair, veuillez consulter l'éditeur du bug et nous répondrons dès que possible.