ASP ใช้การควบคุมการอนุญาตแบบลำดับชั้นอย่างไร ฉันเชื่อว่าปัญหานี้ทำให้โปรแกรมเมอร์สามเณรหลายคนนิ่งงัน ต่อไปนี้เป็นวิธีการใช้ ASP เพื่อใช้การควบคุมการอนุญาตแบบลำดับชั้นตามปัญหานี้
ใช้ ASP เพื่อใช้การควบคุมการอนุญาตตามลำดับชั้น
บทความนี้ใช้การควบคุมการอนุญาตตามลำดับชั้นในระบบการจัดการบัญชี โปรแกรมนี้เขียนขึ้นใน ASP และ JavaScript และทำงานบนเซิร์ฟเวอร์ Win NT ที่ติดตั้ง IIS4.0 มันง่ายและง่ายต่อการบำรุงรักษา
ระดับการอนุญาตถูกแบ่งดังนี้:
①. หัวหน้าแผนกคณบดีและการเงิน: ไม่สามารถเข้าสู่การสอบถามและสถิติได้ไม่ จำกัด
②. รองประธาน: หากคุณไม่สามารถป้อนได้คุณสามารถสอบถามและนับบัญชีของแผนกที่รับผิดชอบ;
③. หัวหน้าแผนก: หากคุณไม่สามารถป้อนได้คุณสามารถสอบถามและนับบัญชีของแผนกนี้ได้
④. การบัญชี: คุณสามารถป้อนบัญชีของแต่ละแผนก (บางครั้งนักบัญชีจำเป็นต้องสร้างบัญชีของหลายแผนก) และคุณสามารถสอบถามและนับบัญชีที่คุณป้อนด้วยตัวเองเท่านั้น
ฐานข้อมูลและฟิลด์ที่เกี่ยวข้องมีดังนี้
①. ฐานข้อมูลและฟิลด์ JK_USER: ID (หมายเลขซีเรียล), BMID (หมายเลขแผนก), ชื่อผู้ใช้ (ชื่อผู้ใช้), PWD (รหัสผ่าน), ขวา (ค่าสิทธิ์);
②. ฐานข้อมูลและฟิลด์ BM: ID (หมายเลขซีเรียล), BMID (หมายเลขแผนก);
③, ฐานข้อมูลและฟิลด์ JZPZ: ID (หมายเลขซีเรียล), BM (แผนก), ZGS (บริษัท ย่อย), XMZ (กลุ่มโครงการ), XM (โครงการ), SR (รายได้), ZC (ค่าใช้จ่าย), SZFX (ทิศทางรายได้), SZXS
RQ (วันที่), JBR (ผู้จัดการ), LRR (inputer), SZSM (คำสั่งขาเข้า);
④, ฐานข้อมูลและฟิลด์ ZGS: ID (หมายเลขซีเรียล), ZGS (บริษัท ย่อย) ชื่อ (ชื่อ บริษัท ), BMID (หมายเลขแผนก)
1. ก่อนอื่นตรวจสอบความถูกต้องตามกฎหมายของผู้ใช้
เปรียบเทียบชื่อผู้ใช้และรหัสผ่านที่ส่งโดยผู้ใช้กับฟิลด์ในฐานข้อมูล jk_user เพื่อกำหนดความถูกต้องตามกฎหมาย เฉพาะผู้ใช้ตามกฎหมาย (ผู้ดูแลระบบระบบเปิดบัญชีสำหรับพวกเขา) เท่านั้นที่สามารถป้อนได้ ผู้ใช้ตามกฎหมายมี
มีสี่ระดับการอนุญาตและค่าอนุญาตสี่ค่าให้กับ "1", "2", "3" และ "4" (ละเว้นโปรแกรม)
2. การบัญชีบัตรกำนัล (การควบคุมการอนุญาตระดับ)
ฟังก์ชั่นการบัญชีบัตรกำนัลใช้เป็นพิเศษสำหรับนักบัญชีและไม่สามารถใช้งานได้โดยผู้อื่น ตัวอย่างเช่นเมื่อป้อนอินเทอร์เฟซรายการบัตรกำนัลเป็นแบบไม่ใช้บัญชีเท่านั้นสามารถมองเห็นปุ่มฟังก์ชั่น "Query Accounting Voucher" ได้เท่านั้นและฟังก์ชั่นอื่น ๆ
ปุ่มไม่สามารถมองเห็นได้ บัตรกำนัลที่ป้อนจะถูกเก็บไว้เป็นครั้งแรกในตารางชั่วคราวซึ่งเรียกว่า "ห้องสมุดบัตรกำนัลที่ไม่ได้บัญชี" หลังจากเรียกใช้ฟังก์ชั่น "บัตรกำนัลบัญชี" คุณสามารถป้อนห้องสมุดบัตรกำนัลในบัตรกำนัล "Unaccounted Voucher Library"
ปรับปรุงใหม่. ขั้นตอนบางอย่างมีดังนี้:
'บุคลากรที่ไม่ได้บัญชีเข้าสู่ปุ่มฟังก์ชั่น "บัตรกำนัลบัตรกำนัล" และ "บันทึกบัตรกำนัลที่ไม่มีเอกสาร" ไม่แสดง
ถ้า (thispage.firstentered) แล้ว
ถ้าเซสชัน ("ขวา") <> "1" แล้ว
button1.hide
button2.hide
สิ้นสุดถ้า
-
'กรอกเวลาและผู้ให้บริการโดยอัตโนมัติ
textbox7.value = ปี (วันที่) & "-" & เดือน (วันที่) & "-" & วัน (วันที่)
textbox9.Value = เซสชัน ("ชื่อผู้ใช้")
ตั้งค่า cnn1 = server.createObject ("adodb.connection")
ตั้งค่า rst1 = server.createObject ("adodb.recordset"))
CNN1.CursorLocation = 3
cnn1.connectiontimeout = 30
cnn1.open "dsn = jky"
rst1.open "เลือก * จาก 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
โทรหานักเขียน
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
-
'การบัญชีบัตรกำนัล
sub button2_onclick
สลัว
s = listbox1.SelectedIndex
Response.write s
สิ้นสุดย่อย
sub listbox3_onchange
สลัว id, i
i = listbox4.getCount ()
ทำในขณะที่ฉัน> -1
call 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 "เลือก 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.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, SR, ZC, SZFX
LRR, SZSM จาก WJZPZ โดยที่ LRR = "" & เซสชัน ("ชื่อผู้ใช้") & "" "
CNN5.Execute "ลบจาก WJZPZ โดยที่ LRR =" "& เซสชัน (" ชื่อผู้ใช้ ") &" ""
สิ้นสุดย่อย
3. คิวรีข้อมูล (การควบคุมการอนุญาตระดับ)
แบบสอบถามกับฟิลด์ของข้อมูลรับรองเป็นเงื่อนไข มีกล่องก่อนเกณฑ์การเลือกสำหรับ "√" ซึ่งจะต้องเลือกเงื่อนไข "แผนก" (เพิ่มโปรแกรมโดยอัตโนมัติ) และเนื้อหาของแผนกจะขึ้นอยู่กับการอนุญาตของผู้ใช้โดยอัตโนมัติ
เรียกค่าที่สอดคล้องกันจากฐานข้อมูลและเนื้อหาสาขาจะถูกปรับโดยอัตโนมัติตามแผนกที่เป็นของมัน ขั้นตอนบางอย่างมีดังนี้:
-
'ป้อนอินเทอร์เฟซแบบสอบถามที่สอดคล้องกันตามค่าการอนุญาต
-
ฟังก์ชั่น thispage_onenter ()
ตั้งค่า cnn1 = server.createObject ("adodb.connection")
ตั้งค่า 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 =" "& เซสชัน (" ชื่อผู้ใช้ ")
& "" ", 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
ช่องทำเครื่องหมาย 1.SetChecked (จริง)
กรณี "2" ผู้จัดการแผนก
listbox1.additem เซสชัน ("BM")
rst1.open "เลือก zgsname จาก zgs โดยที่ bmid =" & เซสชัน ("bmid"), cnn1,1,1, adcmdtext
ถ้า rst1.recordcount> 0 แล้ว
rst1.movefirst
ทำในขณะที่ไม่ใช่ rst1.eof
listbox2.additem cstr (rst1.fields ("zgsname")))))))))))))
rst1.movenext
วง
สิ้นสุดถ้า
rst1.close
cnn1.close
ช่องทำเครื่องหมาย 1.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) = cumpbox1.getChecked ()
ถ้า BM (0) แล้ว
bm (1) = listbox1.getText (listbox1.SelectedIndex)
str = "และ bm =" "& bm (1) &" ""
สิ้นสุดถ้า
zgs (0) = dexcbox2.getChecked ()
ถ้า zgs (0) แล้ว
zgs (1) = listbox2.getText (listbox2.selectedIndex)
str = str & "และ zgs =" & zgs (1) & "" "
สิ้นสุดถ้า
xmz (0) = check33.getchecked ()
ถ้า xmz (0) แล้ว
xmz (1) = trim (txtxmz.value)
str = str & "และ xmz เช่น"%"& xmz (1) &"%""
สิ้นสุดถ้า
xm (0) = concbox4.getChecked ()
ถ้า xm (0) แล้ว
xm (1) = trim (tztxm.value)
str = str & "และ xm เช่น"%"& xm (1) &"%""
สิ้นสุดถ้า
szfx (0) = checkbox5.getChecked ()
ถ้า szfx (0) จากนั้น
szfx (1) = listbox3.getText (listbox3.SelectedIndex)
str = str & "และ szfx =" "& szfx (1) &" ""
สิ้นสุดถ้า
szxs (0) = copkbox6.getchecked ()
ถ้า szxs (0) แล้ว
szxs (1) = listbox4.getText (listbox4.selectedIndex)
str = str & "และ szxs =" "& szxs (1) &" ""
สิ้นสุดถ้า
jbr (0) = checkbox8.getChecked ()
ถ้า jbr (0) แล้ว
jbr (1) = trim (txtjbr.value)
str = str & "และ jbr เช่น"%"& jbr (1) &"%""
สิ้นสุดถ้า
ตั้งค่า 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 "ความสูง =" 33 ">"
Response.write "<tr>"
Response.write "<td width =" 100%"colspan =" 6 "ความสูง =" 44 "align =" กลาง "bgcolor = lightblue>"
Response.write "<p allign =" 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 "จำนวนเงินค่าใช้จ่าย (10,000 หยวน) </td> </tr>"
ถ้าเซสชัน ("ทริทท์") = "1" แล้ว
"response.write" aaaaaaaaa "
rst2.open "เลือก * จาก jzpz โดยที่ id> 0 และ lrr =" "& เซสชัน (" ชื่อผู้ใช้ ") &" "" & str, cnn2,1,1, adcmdtext
อื่น
"response.write" ffffffffffffffffffff
rst2.open "เลือก * จาก jzpz โดยที่ id> 0" & str, cnn2,1,1, adcmdtext
สิ้นสุดถ้า
ถ้า 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 ") &" "
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>"
Response.write "</tr>"
i = i+1
Rst2.Movenext
วง
สิ้นสุดถ้า
Response.write "</table>"
Response.write "</div>"
j = rst2.pagecount
Response.write "<p allign = center> <b> จำนวนหน้าทั้งหมด:"
สำหรับ i = 1 ถึง J
Response.write "<a href =" fmjzpzck1.asp? id = "& i &" "target =" _ blank ">" & i & "</a>" & ""
ถ้า j mod 10 = 0 แล้ว
Response.write "<br>"
สิ้นสุดถ้า
ต่อไป
Response.write "</b> </p>"
rst2.close
cnn2.close
-
สิ้นสุดย่อย
เมื่อใช้โปรแกรมข้างต้นสามารถใช้การสืบค้นที่กำหนดเองตามสิทธิ์ของผู้ใช้และตามข้อกำหนดของผู้ใช้ ระบบทำงานและส่งผ่าน Win NT, IIS4.0, Win98 และ PWS
คุณได้เรียนรู้วิธีการควบคุมการอนุญาตแบบลำดับชั้นใน ASP หรือไม่? หากยังมีบางสิ่งที่ไม่ชัดเจนโปรดปรึกษาบรรณาธิการของข้อผิดพลาดและเราจะตอบกลับโดยเร็วที่สุด