كيف يقوم ASP بتنفيذ التحكم في الإذن الهرمي؟ أعتقد أن هذه المشكلة قد صدمت العديد من المبرمجين المبتدئين. فيما يلي طريقة استخدام ASP لتنفيذ التحكم في الإذن الهرمي بناءً على هذه المشكلة.
استخدم ASP لتنفيذ التحكم في الإذن الهرمي
تنفذ هذه المقالة السيطرة على الأذونات الهرمية في نظام إدارة المحاسبة. تم كتابة البرنامج في ASP و JavaScript ويعمل على خادم Win NT مزود بـ IIS4.0. إنه سريع وسهل الصيانة.
يتم تقسيم مستويات الإذن على النحو التالي:
①. رئيس قسم العميد والتمويل: لا يمكن الدخول ، يمكن العثور على استفسارات وإحصاءات غير محدودة ؛
②. نائب الرئيس: إذا لم تتمكن من الدخول ، فيمكنك الاستعلام عن حسابات القسم المسؤول ؛
③. قائد القسم: إذا لم تتمكن من الدخول ، فيمكنك الاستعلام عن حسابات هذا القسم وحسابها ؛
④. المحاسبة: يمكنك إدخال حسابات كل قسم (يحتاج المحاسب في بعض الأحيان إلى إنشاء حسابات للعديد من الإدارات) ، ويمكنك فقط الاستعلام عن الحسابات التي أدخلتها بنفسك.
قواعد البيانات والحقول المعنية على النحو التالي
①. قاعدة بيانات وحقول JK_USER: معرف (الرقم التسلسلي) ، BMID (رقم القسم) ، اسم المستخدم (اسم المستخدم) ، PWD (كلمة المرور) ، يمين (قيمة إذن) ؛
②. قاعدة بيانات وحقول BM: معرف (الرقم التسلسلي) ، BMID (رقم القسم) ؛
③ ، JZPZ قاعدة بيانات وحقول الحقول: المعرف (الرقم التسلسلي) ، BM (القسم) ، ZGS (التابعة) ، XMZ (مجموعة المشروع) ، XM (المشروع) ، SR (الإيرادات) ، ZC (الإنفاق) ، SZFX (اتجاه الإيرادات) ، SZXS (شكل الإيرادات) ،
RQ (DATE) ، JBR (Manager) ، LRR (inpecter) ، SZSM (بيان وارد) ؛
④ و ZGS قاعدة بيانات وحقول: المعرف (الرقم التسلسلي) ، ZGS (التابعة) الاسم (اسم الشركة) ، BMID (رقم القسم).
1. أولاً ، تحقق من شرعية هوية المستخدم
قارن اسم المستخدم وكلمة المرور المقدمة من قبل المستخدم مع الحقول في قاعدة البيانات JK_USER لتحديد شرعيتها. فقط المستخدمون القانونيون (مسؤول النظام يفتح حسابهم) يمكنهم الدخول. المستخدمون القانونيون لديهم
هناك أربعة مستويات إذن ، ويتم إعطاء أربع قيم إذن لـ "1" و "2" و "3" و "4". (تم حذف البرنامج).
2. محاسبة القسيمة (التحكم في إذن المستوى)
تُستخدم وظيفة محاسبة القسيمة خصيصًا للمحاسبين ولا يمكن استخدامها من قبل الآخرين. على سبيل المثال ، عند إدخال واجهة إدخال القسيمة باعتبارها غير محسوبة ، يمكن رؤية فقط زر وظيفة "قسيمة الاستعلام المحاسبة" ، ووظائف أخرى
الزر غير مرئي. يتم تخزين القسائم التي تم إدخالها لأول مرة في جدول مؤقت ، والذي يسمى "مكتبة القسائم غير المحسوبة". فقط بعد تشغيل وظيفة "محاسبة القسائم" ، يمكنك إدخال مكتبة القسائم في قسائم "مكتبة القسائم غير المحسوبة".
يراجع. بعض الإجراءات كما يلي:
يدخل الموظفون غير المحظوظين ، لا يتم عرض أزرار "محاسبة القسيمة" و "حفظ القسائم غير الموثقة"
إذا (thispage.firstentered) ثم
إذا كانت الجلسة ("يمين") <> "1" ثم
button1.hide
button2.hide
إنهاء إذا
…………
تلقائيا الوقت والمشغل تلقائيا
textbox7.value = year (date) & "-" & month (date) & "-" & day (date)
textbox9.value = جلسة ("اسم المستخدم")
تعيين cnn1 = server.createBject ("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
إذا كان 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
حلقة
إنهاء إذا
RST1.Close
rst1.Open "حدد ZgSname من Zgs حيث bmid =" & id ، cnn1،1،1 ، adcmdtext
إذا كان rst1.RecordCount> 0 ثم
rst1.movefirst
افعل بينما لا rst1.eof
listbox4.additem CSTR (rst1.fields ("ZgSname")))
RST1.Movenext
حلقة
إنهاء إذا
RST1.Close
CNN1.Close
استدعاء Writerst
إنهاء إذا
وظيفة نهاية
……………………
القسيمة المحاسبة
sub button2_onclick
قاتمة
s = listbox1.selectedIndex
استجابة. write s
نهاية الفرعية
sub listbox3_onchange
معرف قاتم ، أنا
i = listbox4.getCount ()
افعل بينما أنا> -1
استدعاء listbox4.removeItem (i)
أنا = I-1
حلقة
id = listbox3.getValue (ListBox3.SelectedIndex)
تعيين cnn2 = server.createBject ("adodb.connection")
SET RST2 = server.createObject ("adodb.recordset")
cnn2.cursorlocation = 3
cnn2.connectionTimeout = 30
cnn2.open "dsn = jky"
RST2.Open "حدد ZgSname من Zgs حيث Bmid =" & id ، CNN2،1،1 ، ADCMDText
إذا كان rst2.RecordCount> 0 ثم
rst2.movefirst
افعل بينما لا rst2.eof
listbox4.additem CSTR (RST2.Fields ("ZgSname")))
RST2.Movenext
حلقة
إنهاء إذا
RST2.Close
CNN2.Close
نهاية الفرعية
sub button2_onclick
تعيين cnn5 = server.createBject ("adodb.connection")
cnn5.cursorlocation = 3
cnn5.connectionTimeout = 30
cnn5.open "dsn = jky"
cnn5.execute "insert في JZPZ (BM ، ZGS ، XMZ ، XM ، SR ، ZC ، SZFX ، SZXS ، RQ ، JBR ، LRR ، SZSM) SELECT BM ، ZGS ، XMZ ، XM ، SR ، ZC ، SZFX ، SZXS ، RQ ، RQ ، JBR ،
LRR ، SZSM من WJZPZ حيث LRR = "" و Session ("username") و "" "
CNN5
نهاية الفرعية
3. استعلام البيانات (التحكم في إذن المستوى)
الاستعلام مع حقول بيانات الاعتماد كشرط. يوجد مربع قبل معايير التحديد لـ "√" ، حيث يجب تحديد شرط "القسم" (يتم إضافة البرنامج تلقائيًا) ، ويعتمد محتوى القسم تلقائيًا على أذونات المستخدم.
اتصل بالقيمة المقابلة من قاعدة البيانات ، وسيتم تعديل محتوى الفرع تلقائيًا وفقًا للقسم الذي ينتمي إليه. بعض الإجراءات كما يلي:
…………………
أدخل واجهة الاستعلام المقابلة وفقًا لقيمة الإذن
…………………
وظيفة thispage_onenter ()
تعيين cnn1 = server.createBject ("adodb.connection")
SET RST1 = server.createObject ("adodb.recordset")
cnn1.cursorlocation = 3
cnn1.connectionTimeout = 30
cnn1.Open "dsn = jky"
حدد جلسة القضية ("انحناء")
القضية "3" "نائب الرئيس
RST1.Open "حدد bm.bmname من JK_USER ، BM حيث 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
حلقة
إنهاء إذا
RST1.Close
RST1.Open "حدد ZgSname من ZGS" ، CNN1،1،1 ، ADCMDText
إذا كان rst1.RecordCount> 0 ثم
rst1.movefirst
افعل بينما لا rst1.eof
listbox2.additem CSTR (rst1.fields ("ZgSname")))
RST1.Movenext
حلقة
إنهاء إذا
RST1.Close
CNN1.Close
checkbox1.setchecked (صحيح)
مدير القضية "2" مدير قسم
جلسة listbox1.additem ("BM")
RST1.Open "حدد ZgSname من Zgs حيث Bmid =" & Session ("BMID") ، CNN1،1،1 ، ADCMDText
إذا كان rst1.RecordCount> 0 ثم
rst1.movefirst
افعل بينما لا rst1.eof
listbox2.additem CSTR (rst1.fields ("ZgSname")))
RST1.Movenext
حلقة
إنهاء إذا
RST1.Close
CNN1.Close
checkbox1.setchecked (صحيح)
"مربع الاختيار 1.0
القضية "1" "محاسب
RST1.Open "حدد BMName من BM" ، CNN1،1،1 ، ADCMDText
إذا كان rst1.RecordCount> 0 ثم
rst1.movefirst
افعل بينما لا rst1.eof
listbox1.additem CSTR (rst1.fields ("bmname")))
RST1.Movenext
حلقة
إنهاء إذا
RST1.Close
RST1.Open "حدد ZgSname من ZGS" ، CNN1،1،1 ، ADCMDText
إذا كان rst1.RecordCount> 0 ثم
rst1.movefirst
افعل بينما لا rst1.eof
listbox2.additem CSTR (rst1.fields ("ZgSname")))
RST1.Movenext
حلقة
إنهاء إذا
RST1.Close
CNN1.Close
القضية "4" عميد
RST1.Open "حدد BMName من BM" ، CNN1،1،1 ، ADCMDText
إذا كان rst1.RecordCount> 0 ثم
rst1.movefirst
افعل بينما لا rst1.eof
listbox1.additem CSTR (rst1.fields ("bmname")))
RST1.Movenext
حلقة
إنهاء إذا
RST1.Close
RST1.Open "حدد ZgSname من ZGS" ، CNN1،1،1 ، ADCMDText
إذا كان rst1.RecordCount> 0 ثم
rst1.movefirst
افعل بينما لا rst1.eof
listbox2.additem CSTR (rst1.fields ("ZgSname")))
RST1.Movenext
حلقة
إنهاء إذا
RST1.Close
CNN1.Close
نهاية الاختيار
إنهاء إذا
…………
وظيفة نهاية
'استعلام بيانات الاعتماد وفقًا للأذونات
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) و" ""
إنهاء إذا
ZGS (0) = checkbox2.getChecked ()
إذا ZGS (0) ثم
ZGS (1) = listbox2.getText (listBox2.SelectedIndex)
str = str & "و zgs =" & zgs (1) و "" "
إنهاء إذا
XMZ (0) = checkbox3.getChecked ()
إذا كان XMZ (0) ثم
XMZ (1) = trim (txtxmz.value)
str = str & "و xmz مثل" ٪ "و XMZ (1) و" ٪ ""
إنهاء إذا
xm (0) = checkbox4.getChecked ()
إذا XM (0) ثم
xm (1) = trim (tztxm.value)
str = str & "و xm مثل" ٪ "& xm (1) و" ٪ ""
إنهاء إذا
szfx (0) = checkbox5.getChecked ()
إذا SZFX (0) ثم
szfx (1) = listbox3.getText (listbox3
str = str & "و szfx =" "و szfx (1) و" ""
إنهاء إذا
szxs (0) = checkbox6.getChecked ()
إذا SZXS (0) ثم
SZXS (1) = listbox4.getText (listbox4
str = str & "و szxs =" "و szxs (1) و" ""
إنهاء إذا
jbr (0) = checkbox8.getChecked ()
إذا JBR (0) ثم
JBR (1) = trim (txtjbr.value)
str = str & "و jbr like" ٪ "و jbr (1) و" ٪ ""
إنهاء إذا
تعيين cnn2 = server.createBject ("adodb.connection")
SET RST2 = server.createObject ("adodb.recordset")
cnn2.cursorlocation = 3
cnn2.connectionTimeout = 30
cnn2.open "dsn = jky"
استجابة. write "<table border =" 1 "cellpadding = 0 cellpacing = 0 width =" 650 "height =" 33 ">"
استجابة. "<tr>"
استجابة. write "<td width =" 100 ٪ "colspan =" 6 "height =" 44 "align =" middle "bgcolor = lightBlue>"
استجابة. "<p align =" center "> <b> <font color ="#000084 "> قائمة قسائم المحاسبة"
reponse.write "</font> </b> </p> </td> </tr>"
استجابة. "<tr>"
استجابة. write "<td width =" 15 ٪ "bgColor = LightSteelBlue>"
استجابة. "القسم </td>"
استجابة. write "<td width =" 20 ٪ "bgColor = LightSteelBlue>"
استجابة. الكتابة "الشركات التابعة </td>"
استجابة. write "<td width =" 15 ٪ "bgColor = LightSteelBlue>"
استجابة. الكتابة "فريق المشروع </td>"
استجابة. write "<td width =" 15 ٪ "bgColor = LightSteelBlue>"
استجابة. "اسم المشروع/رقم العقد </td>"
استجابة. write "<td width =" 15 ٪ "bgColor = LightSteelBlue>"
استجابة. "مبلغ الإيرادات (10000 يوان) </td>"
استجابة. write "<td width =" 15 ٪ "bgColor = LightSteelBlue>"
استجابة. "كمية النقد (10000 يوان) </td> </tr>"
إذا كانت الجلسة ("انحناء") = "1" ثم
"response.write" aaaaaaaaa "
RST2.Open "SELECT * من JZPZ WHERE ID> 0 و LRR =" "و Session (" username ") و" "و Str ، CNN2،1،1 ، ADCMDText
آخر
"Response.write" ffffffffffff "
RST2.Open "SELECT * من JZPZ WHERE ID> 0" & STR ، CNN2،1،1 ، ADCMDText
إنهاء إذا
إذا كان rst2.RecordCount> 0 ثم
rst2.movefirst
rst2.pagesize = 20
rst2.absolutepage = 1
أنا = 0
افعل بينما لا rst2.eof وأنا <rst2.pagesize
استجابة. "<tr>"
استجابة. write "<td width =" 15 ٪ "bgColor = lightgrey>" & rst2.fields ("bm") و "</td>"
استجابة. write "<td width =" 15 ٪ "bgColor = lightgrey>" & rst2.fields ("Zgs") و "</td>"
استجابة. write "<td width =" 15 ٪ "bgColor = lightgrey>" & rst2.fields ("XMZ") و "</td>"
استجابة. write "<td width =" 15 ٪ "bgcolor = lightgrey> <a href =" fmjz1.asp؟ id = "& rst2.fields (" id ") &" "
Target = "_ Blank"> "& rst2.fields (" xm ") و" </a> </td> "
استجابة. write "<td width =" 5 ٪ "bgColor = lightgrey>" & rst2.fields ("sr") و "</td>"
استجابة. write "<td width =" 5 ٪ "bgColor = lightgrey>" & rst2.fields ("ZC") و "</td>"
استجابة. "</tr>"
i = i+1
RST2.Movenext
حلقة
إنهاء إذا
استجابة. الكتابة "</table>"
استجابة. "</div>"
j = rst2.pageCount
استجابة. write "<p align = center> <b> إجمالي عدد الصفحات:"
لأني = 1 إلى ي
Response.write "<a href =" fmjzpzck1.asp؟ id = "& i &" target = "_ blank"> "& i &" </a> "&" "
إذا كان J mod 10 = 0 ثم
الرد. "<br>"
إنهاء إذا
التالي
استجابة. "</b> </p>"
RST2.Close
CNN2.Close
…………
نهاية الفرعية
عند تطبيق البرامج أعلاه ، يمكن تنفيذ الاستعلامات المخصصة وفقًا لأذونات المستخدم ووفقًا لمتطلبات المستخدم. يعمل النظام ويمر على Win NT و IIS4.0 و Win98 و PWS.
هل تعلمت كيفية تنفيذ التحكم في الإذن الهرمي في ASP؟ إذا كان لا يزال هناك شيء غير واضح ، فيرجى استشارة محرر الخطأ ، وسوف نرد في أقرب وقت ممكن.